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