我有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];
});
}
答案 0 :(得分:3)
NSCFArray是NSArray的子类。大多数时候,当你处理NSArray时,那是你正在处理的具体类。当它说NSArray是一个类集群时,这就是文档中的含义。
您的崩溃是因为当您尝试打印[friends count]
时,使用格式字符串@"%@"
。 %@
告诉NSLog期望一个对象,但这是一个NSUInteger。相反,你应该做NSLog(@"%lu", (unsigned long)[friends count])
。 (如果你对格式说明符的想法不是很清楚,那么Apple有一个handy guide。)
答案 1 :(得分:0)
__NSCFArray
只是NSArray
和CFArray
用于支持所谓的免费桥接的基础结构。使用这个:
NSArray *friends = (NSArray*)[jsonResult objectForKey:@"ids"];
答案 2 :(得分:0)
NSLog(@"%@")
只接受一个对象。您必须专门使用NSLog(@"%d")
来输入整数。
我不确定为什么在编译时没有检测到它。