2013-10-10 35 views
1

我剛剛開始研究使用UIManagedDocument進行持久化的應用程序。據我所知,使用UIManagedDocument的唯一原因是利用它自動設置核心數據堆棧。核心數據從UIManagedDocument遷移到正常堆棧

現在,我需要更改數據模型以實現一些新功能。對數據模型的更改將變得非常激烈,我正在考慮從UIManagedDocument轉換到正常的核心數據堆棧。我一直在閱讀很多關於核心數據遷移和UIManagedDocument的內容,但是從UIManagedDocument轉到一個普通的CoreData堆棧,看起來我需要編寫一個遷移數據的類。我只是想知道最好/最安全的方法是什麼。

回答

0

您需要什麼樣的遷移取決於數據模型的變化。就數據遷移而言,從由UIManagedDocument創建的堆棧移動到您創建的堆棧應該沒有意義。如果有多個文檔,則必須弄清楚如何處理該文檔,但如果僅使用UIManagedDocument來避免編寫樣板文件堆棧設置代碼,那不是問題。

由於您將模型更改描述爲「激烈」,因此您必須考慮配置遷移。您可能只需要一個自定義映射模型,或者您可能需要去完整的自定義遷移代碼。這真的取決於模型如何變化的細節。

+0

但是遷移只能幫助遷移到新模型。我仍然需要將數據從UIManagedDocument的堆棧中移出並存入我自己的數據庫中,無論如何,這需要我自己的自定義代碼。那是對的嗎?這就是爲什麼我想知道使用提供的遷移工具是否有任何好處。 – Shinigami

+0

只要您知道其URL是什麼,就應該能夠直接訪問UIManagedDocuments數據庫。通常它位於UIManagedDocument包的子文件夾中,但如果它使用iCloud,它會更復雜一點。它不清楚爲什麼你不想使用UIManagedDocument,它不會讓你的數據庫遷移變得更困難(或更容易)。要將數據庫文件遷移到其他位置,只需使用NSPersistentStoreCoordinators migrationPersistentStore ... –

+0

順便說一句,以上只會幫助您製作現有數據存儲的副本。要將模型轉換爲新模型,您可能需要創建一個新商店,然後運行自定義代碼以從舊商店讀取數據並將其複製到新商店中。 –