为什么我的sqlite数据库在版本控制核心数据模型时没有被迁移?

问题描述:

每次碰到我的核心数据模型的新版本时,SQLite数据库都不会被以前的版本数据填充。为什么我的sqlite数据库在版本控制核心数据模型时没有被迁移?

例如:

  1. 我有一个用户表。
  2. 我点击编辑器>添加模型版本并将模型版本更改为7
  3. 我在用户表中添加了一个字段,如“name”。
  4. 在我的应用程序的委托,我使用MagicalRecord来管理我的数据库,并更新代码[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"myapp 7"];
  5. 我运行在模拟器应用程序,现在无论是在我的用户表,完全消失。

但是,如果我回到“myapp 6”,用户仍然在那里。

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

感谢

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

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

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