有两个相同模型版本时的 Core Data 迁移
Posted
技术标签:
【中文标题】有两个相同模型版本时的 Core Data 迁移【英文标题】:Core Data migration when there's two identical model versions 【发布时间】:2013-12-06 10:31:15 【问题描述】:我有一个托管对象模型,它只包含一个实体Person
。在模型版本 1 中,Person
具有 id
和 name
属性。在版本 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 对象模型版本控制和迁移的更多详细信息?