我有一个项目列表,一个保存在核心数据模型中的Item类的实例。
这些项目使用 NSArrayController 和 Cocoa Bindings 在 NSTableView 中显示。它运作得很好。
但是,当我使用这些说明删除某些项目时:
// Removes selected items
for (Item *item in self.itemsArrayController.selectedObjects) {
[self.managedObjectContext deleteObject:item];
}
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
[[NSApplication sharedApplication] presentError:error];
}
经过一段时间,我获得了异常 CoreData无法解决错误。
我阅读了我找到的所有文档(包括Troubleshooting Core Data),但我没有找到任何有用的文档。
我正在使用新的ARC(自动引用计数),因此我非常确定在保存托管对象上下文后,我不会尝试访问已删除的托管对象。
更新:我的应用是单线程的,所以我不是要尝试从多个线程访问managedObjectContext。
答案 0 :(得分:1)
您是否在多个线程上访问相同的managedObjectContext
?这就像一个竞争条件,你删除了MOC期望的对象。只能从单个线程访问给定的NSManagedObjectContext
。
答案 1 :(得分:0)
您正在枚举数组控制器的选定项,并在枚举时删除对象。尝试:
NSArray *selectedObjects = [[self.itemsArrayController selectedObjects] copy];
for (Item *item in selectedObjects) {
[self.managedObjectContext deleteObject:item];
}
[selectedObjects release];