【发布时间】:2014-02-07 16:40:51
【问题描述】:
我有一个奇怪的行为,这似乎是由于 iOS 中的一些实习生烹饪造成的。
当我这样做时:
id data1 = @(NO);
if ([data1 isKindOfClass:[NSNumber class]]) {
// doesn't come here.
}
但是使用@(YES) 可以完美运行。
首先我想了解原因。其次,我想知道您在我的情况下会怎么做? (因为 id 也可以是文本)。
答案:
确实,@(NO) 是一个类 NSNumber,我的问题是由于其他一些错误。
【问题讨论】:
-
那是您的确切代码吗?我无法重现该问题。
-
不是,实际上我的值存储在
NSDictionary中,然后我用mydict[@"data1"]提取它,我通过一个要求id类型的方法传递它,然后我做我的[data1 isKindOfClass:[NSNumber class]]。我只是不想复制整个内容,但我想NSDictionnary确实会产生影响。 -
那么你应该 NSLog
mydict[@"data1"]实际返回的内容。它可能是nil,或者是一个字符串或其他不是数字的东西。 -
我这样做了
NSLog(@"%@ -- %@ (%@ || %@)", data1, data2, [data1 class], [data2 class]);它返回了我0 -- 1 (__NSCFBoolean || __NSCFBoolean)。当data1为@(NO)且data2为@(YES)或@NO和@YES时。 -
好的,我看到我的错误在其他地方。但是我学到了很多东西,谢谢大家! :)
标签: objective-c class types boolean