EXC_BAD_ACCESS при попытке создать новый NSDictionary

У меня проблемы с созданием NSDictionaries в цикле и добавлением его в NSMutableArray.

В основном я просто хочу изменить имена клавиш, но, поскольку я не смог найти для этого функцию, я выбрал следующий код:

- (NSMutableArray *)getCategoriesForChannel:(int)channelId {
    NSDictionary *data = [self call:@"get_categories.ashx"];
    NSArray *categories = [data objectForKey:@"categories"];
    NSMutableArray *returnArray = [NSMutableArray
                          arrayWithCapacity:[categories count]];

    for(NSDictionary *category in categories) {
        [returnArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                         [category objectForKey:@"Channel_id"], @"id",
                         [category objectForKey:@"Channel_name"], "@name", nil]];
    }
    return returnArray;
}

Но приложение всегда завершает работу, когда достигает метода addObject: и выдает EXC_BAD_ACCESS. Я думаю, что это как-то связано с управлением памятью, но, поскольку у меня нет C-фона, я понятия не имею, как решить эту проблему. Может кто-нибудь указать мне правильное направление? Заранее спасибо!


person Lucas G    schedule 11.12.2010    source источник


Ответы (2)


[returnArray addObject:
    [NSDictionary dictionaryWithObjectsAndKeys:
    [category objectForKey:@"Channel_id"], @"id",
    [category objectForKey:@"Channel_name"], "@name", nil]];

Если это действительно код, который у вас есть (и опечатка не была допущена при его написании в веб-браузере), обратите внимание, что последний ключ, который у вас есть, — "@name" вместо @"name". Фактически это будет C-строка, а не NSString, которую нельзя правильно добавить в NSArray (или большинство классов коллекций, если уж на то пошло).

person NSGod    schedule 11.12.2010
comment
Спасибо, сэр, это действительно была проблема! - person Lucas G; 13.12.2010
comment
Иногда еще одна пара глаз - это все, что вам нужно! Это спасло меня от того, что, я уверен, было бы часами разочарования. Спасибо. - person MikeCocoa; 19.12.2012
comment
Arg, только что сделал ту же ошибку ;-( невероятно, нет предупреждения о компиляции .... - person Thomas Decaux; 30.04.2013
comment
О Боже. Это, кажется, очень распространенная вещь - столкнулся с этим и был разочарован собой! Спасибо. - person Gurusharan S; 26.09.2014

В цикле вы можете NSLog это [категория objectForKey:@"Channel_id"] и [категория objectForKey:@"Channel_name"]? Я подозреваю, что кто-то дает ноль и вызывает проблемы. Точно сказать не могу. Просто предположение.

person hol    schedule 11.12.2010