Вопрос

NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];

if ([arr isMemberOfClass:[NSMutableArray class]]) {
    NSLog(@"YEP!!");
} else {
    NSLog(@"NO!!");
}

Я всегда получаю "НЕТ!!" в консоли.Я пробовал с Array, NSNumber, NSString.Похоже, что все они не работают.Это странно.Как я понял из документации, этот метод должен возвращать YES, если я тестирую agains класс объекта, который является предметом тестирования.Я использую Foundation.h, а не Core Foundation (если это вообще имеет какое-то значение).

Это было полезно?

Решение

Вам нужно использовать isKindOfClass: или respondsToSelector: как NSArray и подобными являются кластеры классов - на самом деле вы получаете подклассы при их создании.Видишь этот ответ для некоторых интересных моментов по этому поводу.

Другие советы

Когда вы создаете массив с помощью [NSMutableArray arrayWithCapacity:], объект, который вы получаете, на самом деле является членом некоторого конкретного подкласса NSMutableArray.NSMutableArray существует только на мгновение в процессе создания конкретного экземпляра.

-isMemberOfClass: возвращает значение true, если получатель isa указатель равен данному классу. -isKindOfClass: возвращает true, если получатель является членом данного класса или любого из его подклассов.

вы пробовали isKindOfClass вместо isMemberOfClass?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top