objective-c - 尝试创建新的 NSDictionary 时出现 EXC_BAD_ACCESS

标签 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;
}

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

最佳答案

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

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

关于objective-c - 尝试创建新的 NSDictionary 时出现 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4417813/

相关文章:

ios - 点击或长按单元格下方

java - Android 中的大型公共(public)静态变量

ios - 使用 dispatch_async 时的 EXC_BAD_ACCESS

objective-c - iOS App 在退出时崩溃

尝试获取设备位置时 iOS 应用程序崩溃 - 线程 1 : EXC_BAD_ACCESS

ios - 如何在 IOS 中以编程方式滚动 UICollectionViewCell?

ios - 调整 UITableViewCell 大小以适合标签或图像和圆角

ios - 获取动态 UILabel 的高度

string - 如何在 Rust 中创建固定大小的可变堆栈分配字符串?

.net - ASP.NET 网站内存使用率相当高