我尝试了多种方法。我知道字典是NULL,因为当我在那里打破时控制台也打印出来。然而,当我把它放在if()中时,它不会触发。
([myDict count] == 0) //results in crash
(myDict == NULL)
[myDict isEqual:[NSNull null]]
答案 0 :(得分:34)
看起来你有一个悬垂或狂野的指针。
您可以将Objective-C对象视为结构的指针。
然后,您可以将它们与NULL
或其他指针进行比较。
所以:
( myDict == NULL )
和
( myDict == [ NSNull null ] )
都有效。
第一个将检查指针是否为NULL
。 NULL
通常定义为void *
,其值为0.
请注意,对于Objective-C对象,我们通常使用nil
。 nil
也定义为void *
,其值为0,因此它等于NULL
。它就在这里表示指向对象的NULL
指针,而不是标准指针。
第二个将myDict
的地址与NSNull
类的单例实例进行比较。所以你在这里比较两个指针值。
快速恢复:
NULL == nil == Nil == 0
由于[ NSNull null ]
是一个有效的实例:
NULL != [ NSNull null ]
现在关于这个:
( [ myDict count ] == 0 )
如果你有一个狂野的指针,它可能会崩溃:
NSDictionary * myDict;
[ myDict count ];
除非使用ARC,否则肯定会崩溃,因为myDict
变量尚未初始化,实际上可能指向任何内容。
如果你有一个悬空指针,它也可能会崩溃:
NSDictionary * myDict;
myDict = [ [ NSDictionary alloc ] init ];
[ myDict release ];
[ myDict count ];
然后,您将尝试向已解除分配的对象发送消息
向nil
/ NULL
发送消息始终在Objective-C中有效。
因此,这取决于您是否要检查字典是否为nil
,或者它是否具有值(因为有效的字典实例可能为空)。
在第一种情况下,与nil
进行比较。否则,检查count是否为0,并确保实例仍然有效。也许你只是忘了保留某个地方。
答案 1 :(得分:8)
if (TheDict == (NSDictionary*) [NSNull null]){
//TheDict is null
}
else{
//TheDict is not null
}
答案 2 :(得分:1)
以上所有内容对我都不起作用,但是
[mydict isKindOfClass:[NSNull class]];
为我工作
答案 3 :(得分:0)
要检查字典是否有nil或NULL数据,您可以检查[字典计数],它将在所有情况下返回0
答案 4 :(得分:0)
if([NSNull null] != [serverResponseObject objectForKey:@"Your_Key"])
{
//Success
}