如何计算NSDictionary存储的NSArray?

时间:2012-05-30 15:37:57

标签: objective-c foundation

我有NSDictionary(使用JSONObjectWithData从JSON解析,如果相关的话),如下所示:

{
ids =     (
    49939999,
    44754859,
    14424892,
    16311801,
    16045487,
    31247745,
    5982852
);
"next_cursor" = 0;
"next_cursor_str" = 0;
"previous_cursor" = 0;
"previous_cursor_str" = 0;
}
使用NSLog(@"%@", jsonResult);进行记录时

我正在使用friends = [jsonResult objectForKey:@"ids"];访问ID,并希望friends的类型为NSArray,但显然属于__NSCFArray类型。为什么呢?

然后我尝试使用[friends count]获取朋友的大小,但这会在运行时产生异常。

如何计算存储NSDictionary的“NSArray”?

更新:代码

        NSError *jsonError = nil;
        id jsonResult = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonError];
        if (jsonResult != nil) {



            self.friends = [jsonResult objectForKey:@"ids"];

            NSLog(@"%@", self.friends);

            NSLog(@"%@", [self.friends class]);

            NSLog(@"%@", [self.friends count]);

            dispatch_sync(dispatch_get_main_queue(), ^{
                [self.tableView reloadData];
            });                
        }

3 个答案:

答案 0 :(得分:3)

NSCFArray是NSArray的子​​类。大多数时候,当你处理NSArray时,那是你正在处理的具体类。当它说NSArray是一个类集群时,这就是文档中的含义。

您的崩溃是因为当您尝试打印[friends count]时,使用格式字符串@"%@"%@告诉NSLog期望一个对象,但这是一个NSUInteger。相反,你应该做NSLog(@"%lu", (unsigned long)[friends count])。 (如果你对格式说明符的想法不是很清楚,那么Apple有一个handy guide。)

答案 1 :(得分:0)

__NSCFArray只是NSArrayCFArray用于支持所谓的免费桥接的基础结构。使用这个:

NSArray *friends = (NSArray*)[jsonResult objectForKey:@"ids"];

答案 2 :(得分:0)

哇,这是我自己的愚蠢。我刚刚发现NSLog(@"%@")只接受一个对象。您必须专门使用NSLog(@"%d")来输入整数。

我不确定为什么在编译时没有检测到它。

来源:http://cocoadev.com/wiki/NSLog