2012-10-22 88 views
1

所以,這就是我面臨的問題。我有一個由NSFetchedResultsController支持的UITableView。現在在應用程序啓動時,我更新數據源,這涉及到進行多個網絡調用並處理傳入數據。如果用戶在更新數據源時刪除其中一行,則訪問異步網絡回調中的已刪除數據會導致應用程序崩潰。我如何優雅地處理這種情況?防止在刪除後訪問CoreData對象訪問

回答

0

嘗試在訪問對象之前先調用isDeleted

0

如果您正在使用NSFetchedResultsController的內存跟蹤,那麼在將記錄從持久存儲區中刪除之前,您將能夠從界面中刪除記錄。確保閱讀NSFetchedResultsController的委託的NSFetchedResultsChangeType,並確保將NSManagedObjectContext從後臺線程(刪除對象的位置)與NSManagedObjectContext讀取記錄合併。

確定對象是否已被刪除的一個好方法是使用existingObjectWithID:error:檢查包含當前對象ID的現有對象。當使用沒有NSFetchedResultsController的NSManagedObjects時,這非常有用。

+0

刪除將在主線程上發生,而更新將在後臺線程上發生。即使我在後臺線程中檢查了existingObjectWithID:error:它可能發生在檢查之後被刪除的對象。我該如何處理?基本上,我如何解決刪除更新衝突,有利於刪除? –

+1

與核心數據問題相比,您有更多的體系結構問題。這是使用多線程的一個棘手部分。在覈心數據的情況下,你需要確保你的上下文是同步的。在主線程上被刪除對象的地方需要監視被操縱的對象/實體的變化。與後臺線程更新對象相同的東西。這樣,如果在主線程中刪除該對象,則該對象將不被允許更新。但首先,仔細看看你的設計。您可能需要一個串行隊列來處理這些類型的操作。 – J2theC