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

后端 未结 6 2116
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-19 04:10

Since the update to Xcode 5.1 I can\'t archive my project any more. Xcode always says \"Multiple methods named \"count\" found with mismatched result, parameter type or attr

相关标签:
6条回答
  • 2020-12-19 04:29

    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'

    0 讨论(0)
  • 2020-12-19 04:34

    Just a cast like:

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

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

    0 讨论(0)
  • 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"];
    }
    
    0 讨论(0)
  • 2020-12-19 04:49

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

    0 讨论(0)
  • 2020-12-19 04:54

    Try:

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

    That help?

    0 讨论(0)
  • 2020-12-19 04:55

    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

    0 讨论(0)
提交回复
热议问题