有两个相同模型版本时的 Core Data 迁移

Posted

技术标签:

【中文标题】有两个相同模型版本时的 Core Data 迁移【英文标题】:Core Data migration when there's two identical model versions 【发布时间】:2013-12-06 10:31:15 【问题描述】:

我有一个托管对象模型,它只包含一个实体Person。在模型版本 1 中,Person 具有 idname 属性。在版本 2 中,我添加了 phone 属性并使用自定义映射模型增加了每个人的 id。后来我创建了版本 3,删除了 phone 属性。这里的版本 1 和版本 3 意外地相同,如下图所示:

MOM ver  | v1        | v2        | v3
---------+-----------+-----------+-----------
Entity   | Person    | Person    | Person
Attrs    |   - id    |   - id    |   - id
         |   - name  |   - name  |   - name
         |           |   - phone |


              |        ^      |       ^
              `--------'      `-------'
Mapping:    * Add phone       * Remove phone
            * Increment id

使用此模型,为模型版本 1 创建的商店与版本 3 具有完全相同的架构。无法确定用户是否拥有需要迁移的旧版本商店或具有最新版本版本。

所以这是我的问题:当我有两个相同的模型版本时,我如何判断一家商店的年龄是否足以迁移?也许通过将一条版本信息放在商店中,但是如何以及什么信息?或者我应该非常小心不要创建这样的版本?

【问题讨论】:

【参考方案1】:

你每次都添加一个新的模型版本,对吧? 您的每个模型都应该有一个唯一的模型标识符。在您的数据模型中选择一个 .xcdatamodel,该 ID 将显示在 Interface Builder 的核心数据模型下。 我喜欢给他们像 1.0, 2.0... 这样的 ID,对应于实际的应用版本。

这是一个字符串,如果需要迁移或其他你需要的东西,你可以签入代码:

[[[self objectModel] versionIdentifiers] anyObject]

【讨论】:

以上是关于有两个相同模型版本时的 Core Data 迁移的主要内容,如果未能解决你的问题,请参考以下文章

Core Data轻量级迁移有多少个迁移步骤?

考虑使用 Core Data 轻量级迁移的多个数据模型版本

在哪里可以找到有关 Core Data 对象模型版本控制和迁移的更多详细信息?

如果我已经发布的 v1 没有版本化的 Core Data 模型,我可以使用“自动轻量级迁移”吗?

在 Core Data 中使用数据模型迁移时应用程序崩溃

如何将一个 Core Data 模型迁移到一个全新的模型?