NSArrayController和异常“CoreData无法解决故障”

时间:2011-09-01 19:55:09

标签: objective-c macos cocoa core-data nsarraycontroller

我有一个项目列表,一个保存在核心数据模型中的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。

2 个答案:

答案 0 :(得分:1)

您是否在多个线程上访问相同的managedObjectContext?这就像一个竞争条件,你删除了MOC期望的对象。只能从单个线程访问给定的NSManagedObjectContext

答案 1 :(得分:0)

您正在枚举数组控制器的选定项,并在枚举时删除对象。尝试:

NSArray *selectedObjects = [[self.itemsArrayController selectedObjects] copy];
for (Item *item in selectedObjects) {
    [self.managedObjectContext deleteObject:item];
}
[selectedObjects release];