Почему -isMemberOfClass: здесь не работает? - PullRequest
4 голосов
/ 04 декабря 2009
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];

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

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

Ответы [ 3 ]

9 голосов
/ 04 декабря 2009

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

3 голосов
/ 04 декабря 2009

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

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

1 голос
/ 04 декабря 2009

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

...