基本上,我試圖在從NSManagedObjectContext
中刪除它並保存上下文後訪問某些屬性。問題在於,在保存上下文之後,Core Data將對象數據標記爲故障,顯然無法恢復它。刪除被管理對象後的核心數據錯誤
我創建了一個示例項目,以複製的問題,您可以下載它here。爲了說明,下面的代碼片斷:
City *city = [self.cities objectAtIndex:indexPath.row];
[self.managedObjectContext deleteObject:city];
if (![self.managedObjectContext save:&error]) {
[self.managedObjectContext rollback];
NSLog(@"Error: %@", error);
}else{
NSLog(@"%@", city);
// All properties of "city" are zeroed.
// Saved. Update data sources and animate changes...
}
生產:
<City: 0x7fe1cbd3cba0> (entity: City; id: 0xd000000000040004 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/City/p1> ; data: {
country = "0xd000000000080002 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/Country/p2>";
name = Rosario;
})
<City: 0x7fe1cbd3cba0> (entity: City; id: 0xd000000000040004 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/City/p1> ; data: <fault>)
我想訪問管理對象,將其刪除後的原因,是更新NSMutableArray
充當數據源一個表格視圖並更新導航控制器堆棧中前一個控制器中的另一個數據源(這在示例項目中未實現)。
結束語,我的問題是:
刪除其NSManagedObjectContext
一個NSManagedObject
和保存上下文之後,它不再保證在管理對象中的數據可以被訪問?即使保存對該被管理對象的引用?
基於我研究過,核心數據是擺脫實體數據一旦上下文被保存以節省內存。這個假設是否正確?是否有其他因素可能導致此次數據錯誤?
謝謝。
爲什麼您希望在保存上下文後能夠訪問已刪除的對象?使用'NSFetchedResultsController'作爲數據源。 – Avi
您不應該使用對已刪除對象的引用。 – Andy
@Avi,因爲我保留了對託管對象的引用。 – Mateus