2011-01-20 4 views
2

Что касается приведенного ниже кода, я обнаружил, что isKindOfClass не может идентифицировать класс.Поведение Strange `isKindOfClass`

id parent = [self.tableDataSource objectAtIndex:indexPath.row]; 
//parent Can be either 'document' or 'folder' 


    NSLog(@"'%@'='%@' ?",[parent class],[Document class]); 
BOOL classCheck = [[parent class] isKindOfClass:[Document class]]; 
NSLog (@"%@", classCheck? @"Yes!" : @"No!"); 

Console Log:

2011-01-20 10: 44: 29,746 Имя_приложения [906: 307] 'документа' = 'Документ'?
2011-01-20 10: 44: 29.756 ApplicationName [906: 307] Нет!

Неужели кто-нибудь сталкивался с этим раньше?

ответ

5

[parent isKindOfClass:[Document class]] должен вернуть ДА. [parent class] - объект класса, который скорее всего не является экземпляром класса Document.

Вот почему NSLog() имена печатает класса (из документации): реализация

+ (NSString *) description

NSObject в этом методе просто печатает имя класса.

+0

Если это не экземпляр документа, то зачем журналу показывать «Документ» = «Документ» –

+0

Насколько OS может быть неактуальным, добавление iphone ipad и ios получает гораздо лучший счет обзора, поскольку они являются популярными любимыми тегами –

+0

Поскольку% @ в NSLog вызывает метод объекта (что бы это ни было) 'description', который в этом случае просто возвращает имя класса в виде строки. Подумайте об этом как о совпадении. – Costique

3

Вы должны писать: [родитель isKindOfClass: [класс Document]]

[родительский класс] будет возвращать объект класса и объект класса является не вид документа.

Смежные вопросы