找到了名为“count”的多个方法,其中包含不匹配的结果,参数类型或属性

时间:2014-03-10 23:10:25

标签: objective-c cocoa-touch compiler-warnings

自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] JSONNSDictionary。 这有什么不对吗?

6 个答案:

答案 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'