1

我有一个NSDictionary(使用 JSON 解析JSONObjectWithData,如果相关的话),看起来像:

{
ids =     (
    49939999,
    44754859,
    14424892,
    16311801,
    16045487,
    31247745,
    5982852
);
"next_cursor" = 0;
"next_cursor_str" = 0;
"previous_cursor" = 0;
"previous_cursor_str" = 0;
}

当使用NSLog(@"%@", jsonResult);.

我正在使用 访问 id friends = [jsonResult objectForKey:@"ids"];,并且希望friends是 type NSArray,但显然它是 type __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];
            });                
        }
4

3 回答 3

3

NSCFArray 是 NSArray 的子类。大多数情况下,当您处理 NSArray 时,这就是您正在处理的具体类。这就是文档中说 NSArray 是类集群时的含义。

您的崩溃是因为当您尝试打印时[friends count],您使用了格式字符串@"%@"%@告诉 NSLog 期待一个对象,但这是一个 NSUInteger。相反,你应该这样做NSLog(@"%lu", (unsigned long)[friends count])。(如果您对格式说明符的概念不完全清楚,Apple 有一个方便的指南。)

于 2012-05-30T15:43:20.873 回答
0

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

NSArray *friends = (NSArray*)[jsonResult objectForKey:@"ids"];
于 2012-05-30T15:43:18.383 回答
0

哇,那是我自己的愚蠢。我刚刚发现NSLog(@"%@")只需要一个对象。您必须专门用于NSLog(@"%d")输入整数。

不过,我不确定为什么在编译时没有检测到这一点。

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

于 2012-05-30T16:20:31.517 回答