2015-10-16 62 views
1

每次碰到我的核心數據模型的新版本時,SQLite數據庫都不會被以前的版本數據填充。爲什麼我的sqlite數據庫在版本控制核心數據模型時沒有被遷移?

例如:

  1. 我有一個用戶表。
  2. 我點擊編輯器>添加模型版本並將模型版本更改爲7
  3. 我在用戶表中添加了一個字段,如「name」。
  4. 在我的應用程序的委託,我使用MagicalRecord來管理我的數據庫,並更新代碼[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"myapp 7"];
  5. 我運行在模擬器應用程序,現在無論是在我的用戶表,完全消失。

但是,如果我回到「myapp 6」,用戶仍然在那裏。

有沒有辦法打破模型版本並保留來自SQLite的數據?

感謝

回答

2

核心數據遷移不會將數據遷移到一個新的文件,它會更新持久性存儲文件到位。除#4之外,您的步驟是正確的 - 因爲在那一步,您要讓Core Data使用與您使用的文件不同的持久性存儲文件。這就是數據丟失的原因,因爲你打開了一個不同的新文件。您明確告訴Core Data不要將現有文件與以前的數據一起使用。如果要更新持久性存儲以使用新的型號版本,則需要使用相同的文件名,以便可以找到和更新現有數據。

對於它的價值,沒有理由讓持久性存儲文件名稱與型號名稱相匹配。它們可以是相同的,但如果您在持久存儲名稱中包含版本號,則事情會變得混亂。更改持久存儲名稱通常不是模型遷移的一部分。

如果需要,您可以將數據移動到新文件中,但這通常不是更新數據模型的一部分。