6

我正在使用objective c 开发一个iphone 应用程序。

我看到了[dictionary objectForKey:@"key"]回报<null>。做 aif([dictionary objectForKey:@"key"] == nil || [dictionary objectForKey:@"key"] == null)似乎没有抓住这种情况。

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

catch 的正确表达是<null>什么?

更多详细信息 nil 的 if 语句仍然没有解决这个问题......也许我太累了,看不到东西,但这里有更多信息:

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

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";
}
4

3 回答 3

12

你有一个NSNull. 实际上,实例,因为它是一个单例。

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

然而,有时程序在集合中存储一个“无”的东西是很有价值的。这NSNull就是为了。

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

当 Cocoa 使用 "%@" 说明符格式化字符串时,nil值将被格式化为带括号的 "(null)"。一个NSNull值将被格式化为带有尖括号的“<null>”。

于 2012-06-03T23:19:39.167 回答
3

新答案:

感谢您添加详细信息。看起来dataresult您设置的 " "不是JSON 对象,因此难怪将原始字符串放入 " 时会得到古怪的结果[NSJSONSerialization JSONObjectWithData:]。在调用任何与 JSON 相关的内容之前,您可能需要对数据进行一些基本的错误检查。

原答案:

首先,如果这是我的代码,我不会命名一个“NSDictionary对象” array(我看到你在编辑中看到了我的评论……希望你早点睡!)。

其次,您要查找的是“ nil”,而不是名为“ <null>”的字符串。正如Apple 的objectForKey:states文档,如果没有为您要求的键找到对象,则返回 nil。Xcode 控制台试图帮助在<null>其输出中将 nil 对象转换为 " " 字符串。

做“ if [dictionary objectForKey: @"key"] != nil”,你应该更快乐。

于 2012-06-03T22:55:04.733 回答
2

只需使用以下代码:

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

这应该这样做。

于 2015-02-27T21:11:03.410 回答