【问题标题】:Why does my sqlite database not get migrated when versioning Core Data model?为什么在对 Core Data 模型进行版本控制时我的 sqlite 数据库没有被迁移?
【发布时间】:2016-01-15 16:22:21
【问题描述】:

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

例如:

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 2015-11-09
      • 2016-03-08
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      相关资源
      最近更新 更多