如何检测NSString是否为null?

| 我有一段代码可以检测
NSString
NULL
nil
等。但是,它崩溃了。这是我的代码:
NSArray *resultstwo = [database executeQuery:@\"SELECT * FROM processes WHERE ready=\'yes\' LIMIT 0,1\"];
for (NSDictionary *rowtwo in resultstwo) {

NSString *getCaption = [rowtwo valueForKey:@\"caption\"];

if (getCaption == NULL) {
theCaption = @\"Photo uploaded...\";
} else if (getCaption == nil) {
theCaption = @\"Photo uploaded...\";
} else if ([getCaption isEqualToString:@\"\"]) {
theCaption = @\"Photo uploaded...\";
} else if ([getCaption isEqualToString:@\" \"]) {
theCaption = @\"Photo uploaded...\";
}

}
这是错误:   由于未捕获的异常\'
NSInvalidArgumentException
\'而终止应用程序,原因:\'
-[NSNull isEqualToString:]
:无法识别的选择器发送到实例
0x3eba63d4
\' 难道我做错了什么?我需要采取其他方式吗?     
已邀请:
Objective-C对象(类型
id
)的
NULL
值为
nil
。 而ѭ1for用于C指针(类型type11ѭ)。 (最后,两者最终保持相同的值(
0x0
)。但是它们的类型不同。) 在Objective-C中:
nil
(全部小写)为空 指向Objective-C对象的指针。
Nil
(大写)是空指针 到Objective-C类。
NULL
(全部大写)是指向的空指针 其他任何东西(就是C指针)。
[NSNull null]
是无法使用nil的情况下的单例(例如,向
NSArray
s中添加/接收nil) 在Objective-C ++中: 以上所有内容,再加上:
null
(小写)或
nullptr
(C ++ 11或更高版本)是指向C ++对象的空指针。 因此,要与
nil
进行比较,您应该明确地与
nil
(或分别为
NULL
)进行比较:
if (getCaption == nil) ...
或者让ObjC / C为您隐式地执行此操作:
if (!getCaption) ...
这是因为C中的每个表达式(并且Objective-C是其超集)都具有隐式布尔值:
expression != 0x0 => true
expression == 0x0 => false
现在,当检查
NSNull
时,这显然不起作用,因为
[NSNull null]
返回指向
NSNull
而不是
nil
的单例实例的指针,因此它不等于
0x0
。 因此,要针对ѭ26进行检查,可以使用以下任一方法:
if ((NSNull *)getCaption == [NSNull null]) ...
或(首选,请参见评论):
if ([getCaption isKindOfClass:[NSNull class]]) ...
请记住,如果
getCaption
恰好是
nil
,则后者(利用消息调用)将返回
false
,尽管在形式上正确,但可能并非您所期望/想要的。 因此,如果需要(无论出于何种原因)同时对
nil
/
NULL
NSNull
进行检查,则必须将这两个检查结合起来:
if (!getCaption || [getCaption isKindOfClass:[NSNull class]]) ...
有关形成等效肯定检查的帮助,请参阅De Morgan的定律和布尔求反。 编辑:NSHipster.com刚刚发表了一篇很棒的文章,介绍了nil,null等之间的细微差别。     
你应该用
if ([myNSString isEqual:[NSNull null]])
这将检查对象myNSString是否等于NSNull对象。     
检查ѭ42的首选方式是
if(!getCaption || [getCaption isKindOfClass:[NSNull class]])   
    
if([getCaption class] == [NSNull class])
    ...
你也可以
if([getCaption isKindOfClass:[NSNull class]])
    ...
如果您想成为将来针对NSNull的新子类的证明。     
只需检查以下代码:
NSString *object;

if(object == nil)
这应该工作。     

要回复问题请先登录注册