当有两个相同的模型版本时,核心数据迁移

时间:2013-12-06 10:31:16

标签: ios macos cocoa-touch cocoa core-data

我有一个托管对象模型,它只包含一个实体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 个答案:

答案 0 :(得分:1)

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

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

[[[self objectModel] versionIdentifiers] anyObject]