cocoa - Coredata、EXC_BAD_ACCESS 或相关对象上的奇怪行为

标签 cocoa core-data memory-management

我有一个 Journal NSManagedObject 子类,它有很多页面。 我创建了这个自定义方法(在类别中)来按顺序获取页面数组。 如您所见,这非常简单。

//
// @returns an array of pages sorted by indexInJournal
//
- (NSArray*)sortedPages {
    NSLog(@"Are we in main thread? %i", [NSThread isMainThread]);
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"indexInJournal"
                                                               ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    NSArray *result = [[self.pages allObjects] sortedArrayUsingDescriptors:sortDescriptors];
    return result;
}

由于某种原因,该方法有时会失败,并且我在 self 对象上得到 EXC_BAD_ACCESS;这很奇怪,因为我正在其上执行该方法。 NSZombieEnabled 没有帮助。

当从其他例程调用时,该方法可以工作,但只返回单个页面(第一个页面);我确定有 3 页。

在 coredata 实例化/释放对象的方式中我缺少什么吗?

干杯, 达维德

最佳答案

您需要确保与 Journal 对象的 ManagedObjectContext 位于同一线程,否则 Journal 对象可能无法找到 Pages 关系中的对象。

跨线程会导致各种问题。在开始尝试之前验证这些方法是否在单个线程上工作。

关于cocoa - Coredata、EXC_BAD_ACCESS 或相关对象上的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5404755/

相关文章:

cocoa - NSURL 来自 NSURLConnection?

objective-c - Xcode 构建失败 "Undefined symbols for architecture x86_64"

ios - 单向一对多的核心数据关系

ios - NSFetchedResultsController:索引 2147483647 处没有对象

C++ 调用析构函数并没有真正从内存中删除对象

c++ - 是否需要使用new关键字创建容器(集合, vector 等),以便在函数之间持久存在?

macos - insertNewObjectForEntityForName 找不到实体 (Swift)

objective-c - 无法更改我子类化的列的颜色

swift - 关闭弹出窗口后表格 View 没有更新?

cocoa - 在GC环境下,Core Data什么时候会释放分配的内存?