测试与NSNull的相等性

时间:2013-05-17 02:06:01

标签: objective-c nsnull

下面是一个代码块,应该测试以查看字典是否为空,如果不是,则拉出正确的对象。但是,出于某种原因,尽管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

4 个答案:

答案 0 :(得分:29)

只需检查:

svcUser == [NSNull null]

这是Apple在docs中提及的方法。

答案 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]