2011-09-01 32 views
0

我有一個項目列表,一個Item類的實例保存在一個核心數據模型中。NSArrayController和異常「CoreData無法履行故障」

該項目使用的是NSArrayController的可可綁定顯示在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

您正在枚舉數組控制器的選定項,並在枚舉時刪除對象。嘗試:

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

您是否在多個線程上訪問相同的managedObjectContext?這感覺就像是一種競爭條件,在這種情況下,你刪除了MOC期望的物體。給定的NSManagedObjectContext只能從單個線程訪問。

+0

親愛的羅布,不,我沒有在多個線程上訪問相同的managedObjectContext。我的應用程序是單線程的。 – Dev