我有一个 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/