2010-12-11 4 views
12

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

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

- (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-фона, я понятия не имею, как решить эту проблему. Может ли кто-нибудь указать мне правильное направление? Спасибо заранее!

ответ

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

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

+1

Спасибо, сэр, это была проблема! –

+1

Иногда вам нужен еще один набор глаз! Это спасло меня, я уверен, что это были бы часы разочарования. Благодарю. – MikeCocoa

+3

Арг, только что сделал ту же ошибку ;-(Невероятно, нет предупреждения о компиляции .... –

2

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

Смежные вопросы