为什么在对Core Data模型进行版本控制时,我的sqlite数据库无法迁移?

时间:2015-10-16 19:50:32

标签: ios sqlite core-data magicalrecord core-data-migration

每次碰到我的核心数据模型的新版本时,SQLite数据库都不会填充先前版本的数据。

例如:

  1. 我有一张用户表。
  2. 点击编辑器>添加模型版本并将模型版本更改为7
  3. 我在users表中添加了一个像“name”这样的字段。
  4. 在我的app委托中,我使用MagicalRecord管理我的数据库,并将代码更新为[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"myapp 7"];
  5. 我在模拟器中运行应用程序,现在用户表中的任何内容都已完全消失。
  6. 但是,如果我回到“myapp 6”,那么用户仍然在那里。

    有没有办法打破模型版本并保留SQLite的数据?

    由于

1 个答案:

答案 0 :(得分:2)

核心数据迁移不会将数据迁移到新文件,它会更新持久存储文件。除了#4之外,你的步骤是正确的,因为在那一步你告诉Core Data使用与你一直使用的不同的持久存储文件。这就是数据丢失的原因,因为您正在打开另一个新文件。您特别告诉Core Data不要将现有文件与之前的数据一起使用。如果要更新持久性存储以使用新的模型版本,则需要使用相同的文件名,以便可以找到并更新现有数据。

对于它的价值,持久存储文件名没有理由与模型名称匹配。它们可以是相同的,但如果在持久性商店名称中包含版本号,那么事情就会变得混乱。更改持久性存储名称通常不是模型迁移的一部分。

如果需要,您可以将数据移动到新文件,但这通常不是更新数据模型的一部分。