我在我的應用程序中使用核心數據,並發現模擬器的一些奇怪行爲:當我在應用程序的核心數據中添加一些數據並使用XCode中的「停止」按鈕退出模擬器(或者按Cmd-Q)立即,下次啓動模擬器時數據不會存儲在數據庫中。經過一些測試後,我發現數據存儲在磁盤上:Core Data何時刷新到磁盤?
- 立即如果我按主頁按鈕。 (差不多 - 這是可能退出應用程序之前,如果退出非常快速的數據存儲。)
- 如果我讓添加數據後的一段時間(至少20秒)的應用程序運行。
它無助於調用[NSManagedObjectContext save:]。行爲是一樣的。
所以我的問題是:這種行爲的原因是什麼?有什麼辦法在退出前強制刷新磁盤?以及是否有一個設備(個人而言,我沒有看到任何,除了力接近,但奇怪的行爲困擾我的一個位)
這是正確的。調用'[context save:&error]; [[context contextContext] save:&error];'執行作業,數據立即保存到磁盤。我必須進行兩個調用(這是合理的),但令人驚訝的是,如果我先調用save或contextContext,則無關緊要!你有解釋嗎? – JRV
順便說一句,作爲其他人的一個說明:我沒有自己設置嵌套上下文,所以這是「幕後」。 – JRV
您必須*不*在* context中調用'[[context parentContext] save:&error]''而不是線程安全的(正如我指出的那樣)。你需要調用'[[context parentContext] performBlock:^(){[[context parentContext] save:NULL]}];'(或類似的) –