我正在使用目标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";
}
答案 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>
}
这应该这样做。