jun*_*ege 14 objective-c nsnull
下面是一个代码块,应该测试以查看字典是否为空,如果不是,则拉出正确的对象.但是,出于某种原因,尽管if
检查失败,代码仍然执行.是否有一些关于NSNull
我不理解的作品的怪癖,或者这是一个苹果虫?
if (svcUser && !(svcUser == (id)[NSNull null])) {
return [svcUser objectForKey:@"access_level"];
}
Run Code Online (Sandbox Code Playgroud)
控制台响应:
(lldb) print svcUser && !(svcUser == (id)[NSNull null])
(bool) $0 = false
(lldb) continue
-[NSNull objectForKey:]: unrecognized selector sent to instance 0x2b51678
Run Code Online (Sandbox Code Playgroud)
JE4*_*E42 30
只需检查:
svcUser == [NSNull null]
Run Code Online (Sandbox Code Playgroud)
这是Apple在他们的文档中提到的方法.
rma*_*ddy 18
NSNull
是一个班级.和所有类一样,你必须使用isEqual:
,而不是==
看两个对象是否代表相同的值.
if (svcUser && ![svcUser isEqual:[NSNull null]]) {
return [svcUser objectForKey:@"access_level"];
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法进行检查:
if(![svcUser isKindOfClass:[NSNull class]]){
return [svcUser objectForKey:@"access_level"];
}
Run Code Online (Sandbox Code Playgroud)
使用@ JE42的方法给我一个Xcode 5.1的警告.而是投下它:
(id)svcUser == [NSNull null]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17622 次 |
最近记录: |