尝试创建新的NSDictionary时EXC_BAD_ACCESS

时间:2010-12-11 17:01:06

标签: objective-c memory-management exc-bad-access

我在循环中创建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;
}

但是app会在到达addObject:方法时退出并抛出EXC_BAD_ACCESS。我认为它与内存管理有关,但由于我没有真正的C-background,我不知道如何解决这个问题。 有人可以指出我正确的方向吗? 提前谢谢!

2 个答案:

答案 0 :(得分:28)

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

如果这实际上是您拥有的代码(并且在您的网络浏览器中编写错误时没有引入错字),请注意您拥有的最后一个密钥是"@name"而不是@"name"。这实际上是一个C字符串,而不是NSString,它无法正确地添加到NSArray(或大多数集合类中)。

答案 1 :(得分:2)

在循环内你可以NSLog这个[category objectForKey:@“Channel_id”]和[category objectForKey:@“Channel_name”]?我怀疑一个人给了nil并造成了麻烦。不确定。只是一个猜测。