首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向NSNull测试相等性

向NSNull测试相等性
EN

Stack Overflow用户
提问于 2013-05-17 10:06:01
回答 4查看 18.8K关注 0票数 14

下面是一个代码块,用于测试字典是否为空,如果不为空,则提取正确的对象。但是,由于某些原因,尽管if检查失败,代码仍然可以执行。NSNull的工作方式有没有什么我不明白的怪癖,或者这是苹果的一个bug?

代码语言:javascript
复制
if (svcUser && !(svcUser == (id)[NSNull null])) {
    return [svcUser objectForKey:@"access_level"];
}

控制台响应:

代码语言:javascript
复制
(lldb) print svcUser && !(svcUser == (id)[NSNull null])
(bool) $0 = false
(lldb) continue
-[NSNull objectForKey:]: unrecognized selector sent to instance 0x2b51678
EN

回答 4

Stack Overflow用户

发布于 2013-12-03 23:36:47

只需检查:

代码语言:javascript
复制
svcUser == [NSNull null]

这是苹果在他们的docs中提到的方法。

票数 31
EN

Stack Overflow用户

发布于 2013-05-17 10:10:11

NSNull是一个类。与所有类一样,您必须使用isEqual:而不是==来查看两个对象是否表示相同的值。

代码语言:javascript
复制
if (svcUser && ![svcUser isEqual:[NSNull null]]) {
    return [svcUser objectForKey:@"access_level"];
}
票数 20
EN

Stack Overflow用户

发布于 2014-04-03 08:28:14

从Xcode 5.1开始,使用@JE42的方法会给我一个警告。取而代之的是强制转换:

代码语言:javascript
复制
(id)svcUser == [NSNull null]
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16600350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档