在有时元素是数组时有时计算NSDictionary中的子项,有时则不是

时间:2011-06-13 15:46:04

标签: iphone objective-c ios

我有一个看起来像这样的NSDictionary:

list 
   {{
         -> id
         -> name
         -> color
   },
   {
          -> id
          -> name
          -> color
   }}

当我循环播放它时效果很好!但不幸的是,有时,结构看起来像这样:

list {
   -> id
   -> name
   -> color
}

返回的结果只有一个。所以我需要知道是否存在一个或者是否返回了多个结果。

我尝试通过查看ID列是否存在于“list”中来检查结果的数量,但不幸的是,当我执行valueForKey时,我得到了类似这样的结果:(429,24),如果只有一个,则只需429结果

但我显然不能指望429的价值。

这是我尝试做的事情之一,它适用于多种结果,但如果有的话则不适用。

NSInteger numResults = [[list valueForKeyPath:@"id.@count"] intValue];

知道如何确定它是一组结果还是仅仅是一个结果?我对数据没有任何控制权,因为它来自通过Web服务的JSON对象。

我也尝试使用[list mutableArrayValueForKey:@"id"];,如果有多个结果,它似乎仍然只返回一个数组。我假设如果只有一个元素,我会得到一个带有一个元素的数组......但显然不是吗?

2 个答案:

答案 0 :(得分:2)

您可以使用isKindOfClass检查您正在处理的对象类型:

NSInteger numResults = 1;
if ([list isKindOfClass:[NSArray class]]) {
  numResults = [list count];
}

答案 1 :(得分:1)

如果我理解正确,一个结果实际上会给你一个NSDictionary,但是多个结果会给你一个NSDrray的NSArray?

假设是这种情况,您可以检查您喜欢的对象类型:

if ([list isKindOfClass:[NSDictionary class]]) {
    //  Must be single result
}
else {
    //  Multiple results case
}

否则,如果我误解了,也许你可以澄清一下。