1

我们如何识别对象是否可用于特定键。我试过以下:

for(NSDictionary *item in jsonArray){
if([item objectForKey:@"EventDate"])
        NSLog([item objectForKey:@"EventDate"]);
}

这使代码崩溃并出现错误:

  -[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x6a567b0

如果密钥不存在,我还发现许多显示的帖子objectForKey将返回。nil我的问题是类中还有一个方法NSDictionary是“setNilValueForKey”。这怎么可能我们不能NSDictionary用 nil 对象指定键,而且我们有方法为 中的对象设置 nil 值NSDictionary

请先提出建议,并在第二次查询时让我清楚。

4

4 回答 4

2

1)您的 jsonArray 包含除 之外的其他类型的对象NSDictionaries,包括至少一个NSStringNSString不响应 objectForKey: 所以当你尝试调用它时它会抛出一个异常。您必须查看 JSON 以确定如何继续您正在做的任何事情。

2)有一种NSObject方法setNilValueForKey:与键值编码有关。这与NSDictionary. 如果您确实需要在字典中表示 nil,请将其设置[NSNull null]为表示 nil 的键的对象。

希望这可以帮助!

于 2012-08-30T08:19:32.530 回答
1

item 不是 NSDictionary 它是一个字符串。所以检查你的 jsonArray 它可能只包含字符串而不是字典

于 2012-08-30T08:16:39.843 回答
1

并非数组中的所有对象都是字典。在处理之前,您需要检查正在处理的数据类型。像这样的东西:

for(NSObject* item in jsonArray) {
  if ([item isKindOfClass:[NSDictionary class]]) {
    // do dictionary stuff
  }
  else if ([item isKindOfClass:[NSString class]]) {
    // do string stuff
  }
}
于 2012-08-30T08:29:15.830 回答
0

回答第二个问题

有一个名为 NSNull 的非 nil 对象专门用于在“普通” nil 不可接受的情况下表示 nil。如果你用[NSNull null]对象替换你的 nils,NSDictionary 将使用它们。不过,您需要在退出时检查 NSNull。

在这里参考更多

回答第一个查询

for(id *item in jsonArray)
{
  if([item isKindofClass:[NSDictionary class])
  {
    NSArray *allKeys = [item allKeys];
    for(NSString *strKey in allKeys)
    {
     if([strKey isEqualToString:@"EventDate"])
     {
       // EventDate key has object
       NSLog([item objectForKey:@"EventDate"]);
     }
    }
  }
}
于 2012-08-30T08:18:49.217 回答