访问应该在从JSON创建的NSDictionary中的密钥时崩溃

时间:2014-04-11 17:43:27

标签: objective-c json cocoa crash nsdictionary

我有dictionary有时会从某些JSON数据中读取空值。当我这样做时:

 NSDictionary *caption=[image objectForKey:@"caption"]; //crash here!

如果字段caption在那里但是为空,(在JSON中,caption:null),我会崩溃。 我该怎样消除这个?

我可以稍后检查null:

 NSDictionary *caption=[image objectForKey:@"caption"];
 NSString *text=@"";
 if( caption!=NULL  )
 {text=[caption objectForKey:@"text"];  }

但是在此之前就已经崩溃了。

这就是我的词典的构建方式:

 NSError *error = nil;
 NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
 NSArray *myResults=[result objectForKey:@"data"];
 long count=[myResults count];

 for(NSDictionary *image in myResults)
 {
       NSDictionary *links=[image objectForKey:@"images"];
       NSDictionary *standard=[links objectForKey:@"standard"];
       NSString *url=[standard objectForKey:@"url"];

       NSLog(@"image:%@",image);
       NSDictionary *caption=[image objectForKey:@"caption"]; //CRASH

1 个答案:

答案 0 :(得分:2)

你确定NSDictionary * caption = [image objectForKey:@“caption”];会回一本字典吗?

无论如何,检查它是否为JSON null的方法是:

if ([image[@"caption"] isEqual:[NSNull null]]) { // it's null }

请注意,词典和数组不能包含nil。 nil不是对象值。 [NSNull null]是一个特殊对象,相当于nil,可以在nil不能使用的地方使用。

https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSNull_Class/Reference/Reference.html