下面是一个代码块,应该测试以查看字典是否为空,如果不是,则拉出正确的对象。但是,出于某种原因,尽管if
检查失败,代码仍然执行。是否有一些关于NSNull
如何工作的怪癖我不明白,或者这是一个苹果虫?
if (svcUser && !(svcUser == (id)[NSNull null])) {
return [svcUser objectForKey:@"access_level"];
}
控制台响应:
(lldb) print svcUser && !(svcUser == (id)[NSNull null])
(bool) $0 = false
(lldb) continue
-[NSNull objectForKey:]: unrecognized selector sent to instance 0x2b51678
答案 0 :(得分:29)
答案 1 :(得分:18)
NSNull
是一个班级。与所有课程一样,您必须使用isEqual:
,而不是==
来查看两个对象是否代表相同的值。
if (svcUser && ![svcUser isEqual:[NSNull null]]) {
return [svcUser objectForKey:@"access_level"];
}
答案 2 :(得分:8)
您可以使用以下方法进行检查:
if(![svcUser isKindOfClass:[NSNull class]]){
return [svcUser objectForKey:@"access_level"];
}
答案 3 :(得分:7)
使用@ JE42&#39的方法在Xcode 5.1中给出了警告。而是投下它:
(id)svcUser == [NSNull null]