2011-07-07 62 views
0

我正在開發一個具有Core Data的應用程序,該應用程序會定期從Web服務下載所有數據。由於下載可能失敗或被用戶取消,我希望能夠回滾到之前的狀態。我試圖撤消NSManagedObjectContext,但這似乎有點慢(我有成千上萬的實體)。我現在正在做的是對持久存儲文件進行備份,下載數據,如果下載失敗,則用備份替換存儲文件。這似乎工作正常,除了我可以從商店獲取實體後似乎有延遲:如果在下載後,我立即去UITableView,使用NSFetchedResultsController,我覺得它是空的。如果我等幾秒鐘,一切都好。切換NSPersistentStore文件時的核心數據延遲

所以我的問題是:有沒有人有過這種延誤呢?有沒有什麼辦法可以避免這個問題,即使它阻塞了線程,也會強制一切準備就緒。

+0

問題是,點擊「取消」按鈕後,恢復需要一段時間才能被調用,這就是爲什麼實體沒有被顯示。 –

回答

1

我還沒有使用過這個設置,但我認爲你看到的延遲可能是由於Core Data不得不清除所有的緩存。核心數據使用如果您使用獲取結果控制器的緩存,它將不得不測試,然後刪除它的現有緩存。

我認爲最好的辦法是拆除核心數據堆棧並重新啓動它。這包括重新創建新提取的結果控制器。

+0

我正在重新創建抓取的結果控制器,但仍然收到延遲。實際上,由於獲取的結果控制器接收到contextDidSave通知,所以更改存儲會使被管理對象指向一個不存在的存儲。 但我會嘗試重置整個堆棧(存儲協調器,模型,託管上下文)並查看它是如何發生的。 –

+0

嗯,這是另一個問題,回答原來的問題。 –