2011-09-14 319 views
1

我有一個應用程序,至少有300個條目。每個條目代表可能是免費或應用程序內購買的對象。該應用程序正在銷售,它附帶了一個預先填充的數據包中的sqlite文件。當應用程序第一次運行時,它會檢查數據庫是否在那裏。如果沒有,它將從包中的sqlite文件複製到應用程序的目錄中,魔法開始。iPhone - 核心數據遷移

隨着時間的推移和用戶購買一些應用內對象,數據庫將更改爲標記所購買的條目。

現在我即將發佈一個新版本。這個新版本附帶另一個代表對象的sqlite文件。結構是一樣的,但代表新數據庫的新sqlite文件現在有更多的對象。

我已閱讀文檔,但沒有找到符合我需要的示例,所以我問你們。我應該遵循哪些步驟?我需要將用戶使用的當前數據庫(版本1)替換爲新版本(版本2),但是當我這樣做時,我需要版本2具有版本1的所有更改,因爲它已安裝(換句話說,複製實體的屬性包含有關購買信息。

我該怎麼辦呢?這是版本?移民?

感謝。

+0

您是使用核心數據設計/填寫數據庫版本還是使用sqllite直接播放? –

+0

我使用了核心數據。對於讀取txt文件併爲我創建數據庫文件的源代碼,我有一個「構建數據庫」模式。然後我得到sqlite文件並放在包上,禁用此模式。 – SpaceDog

回答

3

如果這兩個數據存儲的結構並沒有改變(管理對象模型是一樣的),那麼它就不是版本管理/遷移,我認爲最簡單的做法是檢查數據庫中新對象的存在,如果它們不在那裏,則添加它們。

另一種選擇是同時使用兩個sqlite存儲與mergedModelFromBundles。我對此並不瞭解,它可能比在代碼中創建新對象並添加它們更麻煩。

+0

我的問題是創建對象是一個相對緩慢的過程......但我認爲你的第一個建議是最好的方法來做到這一點。謝謝。 – SpaceDog