EXC_BAD_ACCESS при попытке создать новый NSDictionary - PullRequest
12 голосов
/ 11 декабря 2010

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

Ответы [ 2 ]

28 голосов
/ 11 декабря 2010
[returnArray addObject:
    [NSDictionary dictionaryWithObjectsAndKeys:
    [category objectForKey:@"Channel_id"], @"id",
    [category objectForKey:@"Channel_name"], "@name", nil]];

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

2 голосов
/ 11 декабря 2010

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

...