if字典对象的if语句:当值为<null> </null>时,@“key”

时间:2012-06-03 22:48:43

标签: objective-c

我正在使用目标c购买iPhone应用程序。

我看到[dictionary objectForKey:@"key"]返回<null>。做if([dictionary objectForKey:@"key"] == nil || [dictionary objectForKey:@"key"] == null)似乎没有发现这种情况。

执行if([[dictionary objectForKey:@"key"] isEqualToString:@"<null>"])会导致程序崩溃。

捕获<null>的正确表达式是什么?

更多细节 对于nil的if语句仍然没有抓住案例...也许我只是太累了看不到的东西,但是这里还有其他信息:

通过包含json数据的url填充Dictionary,如下所示:

NSURL *url = [NSURL URLWithString:"http://site.com/"];

dataresult = [NSData dataWithContentsOfURL:url];

NSError *error;
NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:dataresult options:kNilOptions error:&    error];

在字典上执行NSLog会产生以下输出:

{
    key = "<null>";
    responseMessage = "The email / registration code combination is incorrect";
}

3 个答案:

答案 0 :(得分:12)

您有一个NSNull的实例。实际上, 实例,因为它是一个单例。

Cocoa集合不能包含nil,但如果您尝试访问不存在的内容,它们可能会返回nil

然而,有时候一个程序在一个集合中存储一个意味着“没有”的东西是有价值的。这就是NSNull的用途。

碰巧,JSON可以表示空对象。因此,在将JSON转换为Cocoa集合时,这些空对象会被转换为NSNull对象。

当Cocoa使用“%@”说明符格式化字符串时,nil值将被格式化为带有括号的“(null)”。 NSNull值将格式化为“&lt; null&gt;”用尖括号。

答案 1 :(得分:3)

新答案:

感谢您添加详细信息。您设置的“dataresult”似乎是 而不是 一个JSON对象,所以难怪您将原始字符串放入“{ {1}}。在调用与JSON相关的任何内容之前,您可能需要对数据进行一些基本的错误检查。

原始答案:

首先,如果这是我的代码,我不会将“[NSJSONSerialization JSONObjectWithData:]”对象命名为“NSDictionary”(我看到你在编辑中发现了我的评论...希望你得到有些人很快就睡了!)。

其次,您要找的是“array”,而不是名为“nil”的字符串。如Apple's documentation for objectForKey: states,如果找不到您要求的密钥的对象,则返回nil。 Xcode控制台试图将nil对象转换为输出中的“<null>”字符串。

做“<null>”,你应该更开心。

答案 2 :(得分:2)

只需使用以下代码:

if ([[dictionary valueForKey:@"key"] isKindOfClass:[NSNull Class]]{
   //This means that the value inside the dictionary is <null>
}
else{
//the value is not <null>
}

这应该这样做。