测试平等NSNull(Testing equality to NSNull)

2019-09-03 21:32发布

下面是一个代码块,是应该进行测试,以看看字典是空的,如果不是,拉出正确的对象。 然而,出于某种原因,尽管在事实上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

Answer 1:

简单检查:

svcUser == [NSNull null]

这是苹果公司提到在他们的做法文档 。



Answer 2:

NSNull是一类。 而像所有的类,则必须使用isEqual: ,而不是==看到两个对象表示相同的值。

if (svcUser && ![svcUser isEqual:[NSNull null]]) {
    return [svcUser objectForKey:@"access_level"];
}


Answer 3:

您可以通过检查:

 if(![svcUser isKindOfClass:[NSNull class]]){
    return [svcUser objectForKey:@"access_level"];
}


Answer 4:

使用@ JE42的做法给了我一个警告的的Xcode 5.1。 相反,投它:

(id)svcUser == [NSNull null]


文章来源: Testing equality to NSNull