自Xcode 5.1更新以来,我无法再存档我的项目。 Xcode总是说“多个方法命名”计数“找到不匹配的结果,参数类型或属性。这个问题是新的,模拟器和在设备上运行工作正常。这是代码:
for ( int i = 0; i<[parseJSONArray count];i++){
for (int j = 0; j<[JSON[@"data"][@"menu"][i][@"item"] count];j++){
[pictureURL addObject:JSON[@"data"][@"menu"][i][@"item"][j][@"image"]];
}
}
此时Xcode显示错误:[JSON[@"data"][@"menu"][i][@"item"] count]
JSON
是NSDictionary
。
这有什么不对吗?
答案 0 :(得分:16)
问问自己:JSON [@“data”]的类型是什么[@“menu”] [i] [@“item”]?这是“id”。编译器不知道此对象响应的方法。您发送“计数”消息。编译器会遍历它知道的所有类的所有count方法。如果有两个以上不同的,它必须抱怨。
你可以写
NSDictionary* data = JSON [@"data"];
NSArray* menu = data [@"menu"];
NSDictionary* menuI = menu [i];
NSArray* item = menuI [@"item"];
for (NSDictionary* picture in item)
[pictureURL addObject:picture [@"image"];
更易读,更易于理解,运行速度更快,更易于调试。
当然你也可以写
for (NSUInteger j = 0; j < item.count; ++j)
{
NSDictionary* picture = item [i];
[pictureURL addObject:picture [@"image"];
}
答案 1 :(得分:2)
由于有多个Cocoa类,其方法名为count
,而objectForKeyedSubscript:
(JSON[@"data"][@"menu"][i][@"item"]
解析)返回id
,编译器无法进行类型检查它想要发送消息。
要停止警告,您需要将JSON[@"data"][@"menu"][i][@"item"]
的结果投射到其实际类别,例如(NSDictionary *)(JSON[@"data"][@"menu"][i][@"item"])
,或将其放入临时变量:NSDictionary * itemDict = JSON[@"data"][@"menu"][i][@"item"];
答案 2 :(得分:1)
尝试:
[[[[[JSON objectForKey:@"data"] objectForKey:@"menu"] objectAtIndex: i] objectForKey:@"item"] count];
那有帮助吗?
答案 3 :(得分:1)
只是演员:
float a = [[_myArray objectForKey:@"myKey"] count] / 5.0;
float a = [(NSArray *)[_myArray objectForKey:@"myKey"] count] / 5.0;
答案 4 :(得分:0)
尝试像这样
for ( int i = 0; i<[(NSArray *)parseJSONArray count];i++){
for (int j = 0; j<[JSON[@"data"][@"menu"][i][@"item"] count];j++){
[pictureURL addObject:JSON[@"data"][@"menu"][i][@"item"][j][@"image"]];
}
}
你需要传递
parseJSONArray
NSArray的类型
答案 5 :(得分:0)
如果你不想写这样的代码[((NSArray *)aId)count]:
@interface NSArray ()
- (NSUInteger) arrayElementCount;
@end
@implementation NSArray()
- (NSUInteger) arrayElementCount {
return [self count];
}
@end
使用arrayElementCount而不是'count'