2012-05-21 71 views
0

我們正在執行我們的第一個iOS應用更新,也是我們的第一次Core Data遷移。核心數據遷移 - 從先前版本遷移選定數據

它似乎比我在網上看到的標準和輕量級核心數據遷移的例子更復雜,但也許我錯過了一些東西。

我們的場景是我們已經更新了.xcdatamodel(簡單地添加了一個新字段)以及我們的應用程序中使用的很多參考數據(存儲在我們的核心數據數據庫中),但是我們需要保留一些用戶數據(存儲在相同的核心數據數據庫中)。

我已經將模型定義的多個版本添加到我們的.xcdatamodelld文件中,並且玩過輕量級核心數據遷移過程(使用映射模型(.xcmappingmodel文件)),它成功更新模型,但是我看不出有什麼明顯的方式可以讓我們將選擇的數據(用戶數據)從以前版本的數據庫導入到與下一版本應用程序捆綁在一起的新數據(包含我們更新的參考數據) 。

任何有關如何處理這種情況的建議將非常感謝。

由於提前,泰德

回答

0

最後,我們通過將用戶數據放入plist文件(其中的數量相當有限)並保留Core Data數據庫僅用於系統中的參考數據來解決此問題,所以它可以在未來被覆蓋而不用擔心。

輕量遷移在首次運行時更新數據模型,然後一次性遷移調用將創建並填充用戶數據plist文件,重命名v1核心數據持久性存儲* _migrated.sqlite,將v2 sqlite數據庫從綁定到文檔目錄中,然後重置MOM,並將MOM,MOC和永久存儲設置爲零,以便下次啓動Core Data時,它將使用v2 sqlite數據庫作爲永久存儲。

Phew。我希望這對任何讀者都有意義,可以隨時索取任何其他細節,但實際上這比聽起來簡單得多!

1

你的用戶數據庫將被升級‘到位’。不會有任何遷移或進口/出口的必要。當用戶運行應用程序的新版本時,現有數據庫將使用新字段進行升級。我不確定這是否回答你的問題,但不會有任何「導入」正在進行。

+0

嗨Melsam, 感謝您的回答。我意識到輕量級遷移將簡單地更新用戶的現有數據庫。我想要做的是在軟件包中包含一個新的數據庫文件,將用戶數據從以前的數據庫遷移到它中,然後最後刪除以前的數據庫。 我開始意識到這可能不是一個非常標準的核心數據遷移場景,並且道歉如果我的問題沒有描述出色的情況... – Ted

+1

對不起,我不明白你的問題。您所描述的內容似乎比輕量級遷移可以處理的要複雜得多。似乎手動移動數據是最佳選擇(即通過初始化多個NSPersistentStoreCoordinator)。 – melsam

+0

是的,我想是的。我現在開始後悔參考數據和用戶數據都存儲在同一個持久存儲現在...巴。不管怎麼說,還是要謝謝你。 – Ted