【问题标题】:-isKindOfClass: not working with NSCFString-isKindOfClass:不使用 NSCFString
【发布时间】:2012-06-26 16:30:12
【问题描述】:

为什么我的 if 语句不起作用?它不接受 NSCFStrings... 基本上我是这样做的:

if ([myObj isKindOfClass:[NSString class]]) {
    // ...
}
else if ([myObj isKindOfClass:[NSNumber class]]) {
    //...
}
else {
    NSLog(@"Invalid NSMutableArray.\n\tWrong type in array: %@, The value is: %@.",[myObj class], myObj);
}

这是一个循环,我在其中迭代一个 NSMutableArray,里面只有 NSNumbers 和 NSStrings。
很奇怪,它接受 NSNumbers,但不接受 NSStrings!
输出总是:

Invalid NSMutableArray.
    Wrong type in array: NSCFString, The value is: [Value I put in the string].

我认为 NSCFString 是 NSString 的子类,-isKindOfClass: 也检测到子类?

更新:
我自己解决了。这确实是由于——正如@jjv360 所说——第二个 if 之前缺少 else。我认为这是一个错字,因为我在这里重新输入了它而不是复制粘贴,那个因为我嵌套了更多 if-elses 并且事情变得混乱(这是谷歌翻译)。 毕竟很愚蠢。

jjv360 请将此作为答案发布。

【问题讨论】:

  • NSLog 中的term 变量是什么?不应该是myObj吗? (或者反过来……)
  • 是的,你是对的。我试图通过更改 var 名称使其更符合逻辑,但我忘记了日志记录语句。
  • 另外,第一条和第二条if 语句之间缺少else...
  • 两个问题:1) 你为什么不使用 NSStrings 2) 如果你使用 NSStrings,它会起作用吗?另外,您是否尝试过添加一个or 语句,允许该类为[NSCFString class]
  • @Cake 1. 我别无选择。说 @"cetera" 会自动创建一个 NSCFString。 2. NSCFString 类是私有的。

标签: objective-c introspection


【解决方案1】:

这是我作为答案发布的评论:

您的 if 语句之间缺少 else 语句。没有它,它将运行第一个块中的代码以及最后一个else块中的代码......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-24
    • 2014-10-13
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多