【问题标题】:Core Data Migration - Migrating selected data from a previous version核心数据迁移 - 从以前的版本迁移选定的数据
【发布时间】:2012-05-28 01:23:30
【问题描述】:

我们正在执行我们的第一个 iOS 应用更新,以及我们的第一个核心数据迁移。

这似乎比我在网上看到的标准和轻量级核心数据迁移示例更复杂,但也许我遗漏了一些东西。

我们的场景是我们更新了 .xcdatamodel(只是添加了一个新字段),以及我们应用程序中使用的很多参考数据(存储在我们的 Core Data 数据库中),但是我们需要保留一些用户数据(存储在同一个 Core Data 数据库中)。

我已将模型定义的多个版本添加到我们的 .xcdatamodelld 文件中,并尝试了轻量级核心数据迁移过程(使用映射模型(一个 .xcmapingmodel 文件)),它成功更新了模型,但是我看不到任何明显的方式可以让我们将选定的数据(用户的数据)从先前版本的数据库导入到与下一个版本的应用程序捆绑在一起的新数据库中(包含我们更新的参考数据)。

非常感谢任何有关如何处理这种情况的建议。

提前致谢,泰德

【问题讨论】:

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


    【解决方案1】:

    您的用户数据库将“就地”升级。不需要任何迁移或导入/导出。当用户运行您的应用程序的新版本时,现有数据库将使用新字段进行升级。我不确定这是否能回答你的问题,但不会有任何“导入”。

    【讨论】:

    • 您好梅尔萨姆,感谢您的回答。我意识到轻量级迁移只会更新用户现有的数据库。我要做的是在捆绑包中包含一个新的数据库文件,将用户数据从以前的数据库迁移到其中,然后最后删除以前的数据库。我开始意识到这可能不是一个非常标准的核心数据迁移场景,如果我的问题没有很好地描述这种情况,我深表歉意......
    • 对不起,我没听懂你的问题。您所描述的内容似乎比轻量级迁移可以处理的要复杂得多。似乎手动移动数据是最好的选择(即通过初始化多个 NSPersistentStoreCoordinator)。
    • 是的,我想是的。我开始后悔现在将参考数据和用户数据都存储在同一个持久存储中......呸。还是谢谢。
    • 对数据层进行改进永远不会太晚。现在的一些痛苦将在未来产生回报。祝你好运!顺便说一句,如果我的回答有帮助,请投票:)
    【解决方案2】:

    最后,我们通过将用户数据放入 plist 文件(数量相当有限)来解决这种情况,并保留 Core Data 数据库仅用于系统中的参考数据,所以它以后可以覆盖,不用担心。

    轻量级迁移在第一次运行时更新数据模型,然后一次性迁移调用创建并填充用户数据 plist 文件,重命名 v1 核心数据持久存储 *_migrated.sqlite,从包中复制 v2 sqlite 数据库进入文档目录,然后重置 MOM,并将 MOM、MOC 和 Persistent Store 设置为 nil,以便 Core Data 下次启动时使用 v2 sqlite 数据库作为其 Persistent Store。

    呸。我希望这对任何阅读它的人都有意义,请随时询问任何其他细节,但老实说,它比听起来要简单得多!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      相关资源
      最近更新 更多