【发布时间】:2014-04-11 17:43:26
【问题描述】:
我有一个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
【问题讨论】:
-
你不能在 NSDictionary 中有一个实际的 null/nil,除非字典以某种方式损坏。您确定崩溃来自该特定声明吗?发生了什么异常?
-
贴出真正导致崩溃的代码。还包括完整的错误消息。
-
请注意,您可以在 NSDictionary 中有一个 NSNull 对象,这样 NSLog 就会像“(NULL)”一样(我忘记了确切的消息)。 NSNull 对象不会是 == null/nil,如果在下一条语句中盲目使用,将导致“无效选择器”异常。然而,NSNull 对象将比较
== [NSNull null],因此您可以使用它来检查它。 -
我再说一遍,你不能创建一个包含
nil值的NSDictionary。向我们展示您的字典转储。 (并向我们展示创建它的 JSON。) -
仅供参考 - 否决票是因为您的问题没有提供足够的细节来帮助回答它。在您指出导致崩溃的实际代码行和崩溃的错误消息之前,您的问题确实无法回答 - 因此投反对票。您的最新更新仍未提供此信息。
标签: objective-c json cocoa crash nsdictionary