核心数据版本控制 - 需要多个映射模型

Posted

技术标签:

【中文标题】核心数据版本控制 - 需要多个映射模型【英文标题】:Core Data Versioning - Multiple mapping models required 【发布时间】:2012-12-04 18:17:47 【问题描述】:

我有一个使用 Core Data 的现有项目,我的 xcdatamodeld 包中有 3 个版本。到目前为止,我只使用了轻量级迁移,因为我主要添加了新参数和实体,但是我现在希望将现有参数移动到新实体中。我意识到我必须创建一个 mapping model 来执行此操作,以便在参数之间迁移数据。

我认为有些用户使用版本 1 的应用程序版本非常旧,而其他用户则使用版本 2 和 3。

问题:

    我需要创建一个从所有现有版本到新版本的映射模型,还是只从最新版本创建一个映射模型

    我是否需要更改/禁用 NSPersistentStoreCoordinator 上的轻量级迁移选项?目前我启用了以下选项:

    NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption

我认为从 v1 到 v2 到 v3 仍然需要轻量级迁移,但是从 v3 到 v4 需要新的映射模型。我环顾四周,但找不到任何有关这一切如何发生的信息,因为大多数教程仅涵盖 2 个版本。

谢谢

【问题讨论】:

【参考方案1】:
    仅来自最新版本。 没有。

迁移是连续的(这就是为什么您需要保留所有模型版本的原因,即使预计不会从第一个版本迁移。

NSMigratePersistentStoresAutomaticallyOption 只会在不存在映射模型的情况下进行自动迁移。

【讨论】:

也许我不自信,但是你从哪里得到这个信息,迁移是连续的?轻量级迁移仅尝试从您的 momd 文件中的当前存储模型更新到当前模型。如果远程版本与轻量级不兼容,并且您只有从 last-1 到 last 的映射模型 - 它不会自动适用于旧版本! 对不起,无能,不是“不自信”。我不是母语人士。 好吧,这假设(就像 Apple 的设置一样)您无法确定该模型的最早版本是什么。因此包含所有版本是最安全的,也因为它几乎不消耗任何资源,所以没有理由包含所有版本。 是的,当然,您必须包含所有模型,但我的意思是 - 仅包含所有模型并运行“addPersistentStoreWithType:...”不会自动调用迁移 1-2,然后2-3,然后是 3-4 等等。它将尝试从 1 迁移到当前的 1-4,如果无法执行轻量级迁移 - 它将失败。 刚刚实现了这个,我必须从每个可能的先前版本创建一个映射模型。

以上是关于核心数据版本控制 - 需要多个映射模型的主要内容,如果未能解决你的问题,请参考以下文章

核心数据模型版本控制,没有 xcdatamodeld 文件

核心数据版本控制和迁移

我怎样才能明智地处理版本控制和核心数据模型?

在没有打开版本控制的情况下更改了核心数据模型

核心数据版本控制(轻量级迁移)问题

无法将核心数据文件添加到我现有的项目(版本控制问题)...?