检查NSDictionary是否为空?

时间:2012-12-19 19:59:14

标签: iphone objective-c

我尝试了多种方法。我知道字典是NULL,因为当我在那里打破时控制台也打印出来。然而,当我把它放在if()中时,它不会触发。

([myDict count] == 0) //results in crash
(myDict == NULL)
[myDict isEqual:[NSNull null]]

5 个答案:

答案 0 :(得分:34)

看起来你有一个悬垂或狂野的指针。

您可以将Objective-C对象视为结构的指针。

然后,您可以将它们与NULL或其他指针进行比较。

所以:

( myDict == NULL )

( myDict == [ NSNull null ] )

都有效。

第一个将检查指针是否为NULLNULL通常定义为void *,其值为0.
请注意,对于Objective-C对象,我们通常使用nilnil也定义为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
}