Multiple methods named “count” found with mismatched result, parameter type or attributes

大兔子大兔子 提交于 2019-11-29 10:04:42

Ask yourself: What is the type of JSON[@"data"][@"menu"][i][@"item"] ? It is "id". The compiler doesn't know which method this object responds to. You send a "count" message. The compiler goes through all the count methods of all classes that it knows about. If there are more than two different ones, it has to complain.

You could write

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

More readable, easier to follow, runs faster, and easier to debug.

Of course you can also write

for (NSUInteger j = 0; j < item.count; ++j)
{
    NSDictionary* picture = item [i];
    [pictureURL addObject:picture [@"image"];
}

Since there are multiple Cocoa classes with a method named count, and objectForKeyedSubscript: (to which JSON[@"data"][@"menu"][i][@"item"] resolves) returns id, the compiler can't do the typechecking it wants to do for the message send.

To stop the warning, you'll need to cast the result of JSON[@"data"][@"menu"][i][@"item"] to its actual class e.g., (NSDictionary *)(JSON[@"data"][@"menu"][i][@"item"]), or put it into a temporary variable: NSDictionary * itemDict = JSON[@"data"][@"menu"][i][@"item"];

Try:

[[[[[JSON objectForKey:@"data"] objectForKey:@"menu"] objectAtIndex: i] objectForKey:@"item"] count];

That help?

Just a cast like:

float a = [[_myArray objectForKey:@"myKey"] count] / 5.0;

float a = [(NSArray *)[_myArray objectForKey:@"myKey"] count] / 5.0;

try with like this

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

you need to passing

parseJSONArray

type of NSArray

In case you don't want to write code like this [((NSArray*)aId) count]:

@interface NSArray ()
- (NSUInteger) arrayElementCount;
@end

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

Using arrayElementCount instead of 'count'

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!