2014-03-26 32 views
1

正常情況下,當我爲我的應用程序備份核心數據文件時,我會在應用程序運行時將.sqlite文件複製到其他位置。但是現在日誌(wal)已啓用,這不再起作用。我看不到NSPersistentStoreCordinator或NSManagedObjectContext寫入新文件的方法。我猜也許我有2種方法:複製/備份持久存儲

    • 與@再次關閉持久性存儲和打開它{@「journal_mode」:@「刪除」},然後複製.sqlite文件。
  1. 添加另一個持久存儲並可能從原始ps複製到新的?

有沒有更好的辦法? 謝謝。

回答

6

更改日記模式將消除日記文件,因此很簡單。但是我不知道我是否會相信它,因爲不能保證Core Data實際上已經刷新了對SQLite文件的所有新更改。這可能是好的,但可能會有一些Core Data尚未寫出的內存更改。這幾乎可以肯定是安全的,但有一點偶然,它有可能無法正常工作。

選項2會更安全,但更多的工作。我會使用NSPersistentStoreCoordinatormigratePersistentStore:toURL:options:withType:error:方法創建第二個持久性存儲(該文檔特別提到可用於「另存爲」操作)。告訴核心數據爲你創建副本應確保所有必要的內容都被實際複製。只需不要在主持久性商店協調員上執行此操作,因爲在遷移後,PSC會將對原始商店對象的引用(該文件仍然存在,但不再由該PSC使用)引用。步驟爲

  1. 創建一個新的遷移NSPersistentStoreCoordinator並添加您的原始持久性存儲文件。
  2. 使用此新PSC遷移到新的文件URL。
  3. 放下對這個新PSC的所有參考,不要將它用於其他任何東西。
+0

可能選項3只是複製SQLite文件和關聯的日記文件?日誌文件與sqlite文件具有相同的文件名,但具有不同的路徑擴展名。 –

+0

謝謝你的回答。持久存儲元數據如何?在我的* .sqlite數據庫恢復到其他設備後,我發現我失去了它。這是真的還是我的錯誤? –

+0

元數據存儲在單獨的表中的SQLite文件中。您不應該採取任何特殊步驟來避免丟失。但是,如果您忘記了日誌文件,則可能會丟失各種數據,包括元數據。如果你以某種方式失去它,請發表一個問題,描述你正在做的事情導致它丟失。 –