【问题标题】:Strange `isKindOfClass` behaviour奇怪的`isKindOfClass`行为
【发布时间】:2011-01-20 11:00:20
【问题描述】:

参考下面的代码,我发现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!");

控制台日志:

2011-01-20 10:44:29.746 ApplicationName[906:307] 'Document'='Document' ?
2011-01-20 10:44:29.756 应用程序名称[906:307]否!

以前有人遇到过这种情况吗?

【问题讨论】:

    标签: iphone objective-c cocoa-touch ipad ios


    【解决方案1】:

    [parent isKindOfClass:[Document class]] 应该返回 YES。 [parent class] 是一个类对象,它很可能不是类 Document 的实例。

    这就是NSLog() 打印类名的原因(来自文档):

    + (NSString *) description

    NSObject 对此的实现 方法只是打印名称 类。

    【讨论】:

    • 如果它不是 Document 的实例,那么为什么日志会显示 'Document'='Document'
    • 尽管操作系统可能无关紧要,但添加 iphone ipad 和 ios 可以获得更好的观看次数,因为它们是最受欢迎的标签
    • 因为 NSLog 中的 %@ 调用对象的(不管它是什么)description 方法,在这种情况下它只返回一个类名作为字符串。认为这是一个巧合。
    • 好的,我恢复了标签。对不起。
    【解决方案2】:

    你应该写:[ parent isKindOfClass: [ Document class ] ]

    [ parent class ] 将返回一个 Class 对象,而 Class 对象不是一种 Document。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2015-07-20
      • 2010-10-03
      • 2021-07-12
      相关资源
      最近更新 更多