Objective c 名为“的多个方法”;计数“;发现结果、参数类型或属性不匹配

Objective c 名为“的多个方法”;计数“;发现结果、参数类型或属性不匹配,objective-c,cocoa-touch,compiler-warnings,Objective C,Cocoa Touch,Compiler Warnings,由于升级到Xcode 5.1,我不能再存档我的项目了。Xcode总是说“找到了多个名为“count”的方法,但结果、参数类型或属性不匹配。这是一个新问题,模拟器在设备上运行正常。下面是代码: for ( int i = 0; i<[parseJSONArray count];i++){ for (int j = 0; j<[JSON[@"data"][@"menu"][i][@"item"] count];j++){ [pictureU

由于升级到Xcode 5.1,我不能再存档我的项目了。Xcode总是说“找到了多个名为“count”的方法,但结果、参数类型或属性不匹配。这是一个新问题,模拟器在设备上运行正常。下面是代码:

    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"]];
        }
    }
for(int i=0;i尝试:


这是否有帮助?

由于有多个Cocoa类使用名为
count
的方法,并且
ObjectForkeydSubscript:
(向其中
JSON[@“数据”][@“菜单”][i][@“项”]
解析)返回
id
,编译器无法为发送的消息执行它想要执行的类型检查


要停止警告,您需要将
JSON[@“data”][@“menu”][i][@“item”][/code>的结果强制转换为其实际类,例如
(NSDictionary*)(JSON[@“data”][@“menu”][i][@“item”]
,或将其放入临时变量:
NSDictionary*itemDict=JSON[@“data”][@“menu”][i][@“item”];

问问自己:JSON[@“数据”[@“菜单”][i][@“项”]的类型是什么?它是“id”。编译器不知道该对象响应哪个方法。你发送一条“计数”消息。编译器会检查它知道的所有类的所有计数方法。如果有两个以上不同的,它会抱怨

你可以写

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"];
}
for(整数j=0;j
像这样试一下

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"]];
    }
}

for(int i=0;i以防您不想编写这样的代码[((NSArray*)aId)count]:

使用arrayElementCount而不是“count”

就像一个强制转换:


浮点a=[[u myArray objectForKey:@“myKey”]计数]/5.0;


浮点a=[(NSArray*)[[u myArray objectForKey:@“myKey”]计数]/5.0;

不,这没有帮助,这个问题对我来说很奇怪,是更新带来的。可能是重复的啊,很好!我从来都不知道。方便的信息就在那里:)谢谢你!!但是为什么Xcode 5.1会出现这个问题呢?不确定,@seniorbenelli。编译器以前应该对此发出警告。关于直接迭代而不是索引,这是一个很好的观点。确实是一种方法。很有趣。但是如果它是这样工作的,那么它会找到具有相同签名的多个方法(相同的参数和返回类型)但执行不同的操作。这些操作可能不涉及只有特定对象才会涉及的内容(这可能有助于识别此
id
所指的对象),但是说一些通用的东西,比如打印字符串。比如说一个类的方法打印foo,另一个类的方法打印boo。那么它将如何区分呢?它失去了OOPS的基本概念。同一个方法签名可以存在于多个对象中。
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"]];
    }
}
@interface NSArray ()
- (NSUInteger) arrayElementCount;
@end

@implementation NSArray()
- (NSUInteger) arrayElementCount {
    return [self count];
}
@end