0

我正在使用兩個MOC,一個用於主線程,另一個MOC用於後臺線程。 在主線程上,我有一個UITableView與FRC(NSFetchedResultsController)一起工作。CoreData在從後臺保存操作期間無法完成故障MOC

偶爾我運行一次大規模的保存操作,刪除所有對象並建立幾百個新對象...此時我想在主線程中使用UITableView刷新其數據(使用FRC明顯)。因此,主MOC註冊到NSManagedObjectContextDidSaveNotification通知(從後臺MOC收到)並在該階段運行mergeChangesFromContextDidSaveNotification以確保UITableView相應地更新。

這一切都正常工作,直到我試圖在保存操作中滾動UITableView。當我嘗試滾動視圖時,「coredata無法完成錯誤」引發異常。這是FRC仍然保留已刪除對象的結果(在主MOC上收到來自NSManagedObjectContextDidSaveNotification通知的mergeChangesFromContextDidSaveNotification之前,保存操作仍在運行)。 這是收到mergeChangesFromContextDidSaveNotification後,保存操作和UITableView更新之間的某種「競爭條件」。

與這兩個MOC合作並照顧FRC的正確方法是什麼?因此它能夠應對這種情況?

回答

0

apples doc

故障無法履行問題:您看到錯誤消息,「核心 數據不能滿足故障」。

原因:相應對象的基礎數據已從持久性存儲中刪除 。

補救措施:您應該丟棄此對象。具有較強的參照管理對象

開始:

發生此問題在至少兩種情況:

首先。通過託管對象上下文刪除託管的 對象。保存對象 上下文中的更改。此時,被刪除的對象已變成 故障。它不會被破壞,因爲這樣做會違反內存管理的規則。

嘗試從之前的 保留的引用中檢索屬性或關係。核心數據將嘗試對故障管理的對象 進行故障排除,但將無法執行此操作,因爲該對象已從商店的 中刪除。也就是說,商店中不再有一個具有相同全局ID的對象。

第二個:

從託管對象上下文中刪除對象。無法打破所有從其他對象到該對象的關係 。保存更改。

+0

謝謝。我讀過這篇文章......考慮到我描述的「丟棄這個對象」的架構和場景,最好的方法是什麼? – Joel

相關問題