我在循环中创建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,我不知道如何解决这个问题。
有人可以指出我正确的方向吗?
提前谢谢!
答案 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并造成了麻烦。不确定。只是一个猜测。