【问题标题】:Move a Core Data entity and its data into new Core Data model file through Migration通过迁移将核心数据实体及其数据移动到新的核心数据模型文件中
【发布时间】:2015-08-06 08:57:08
【问题描述】:

是否可以使用迁移将核心数据实体Car 及其在Model1 中的数据移动到新的核心数据模型Model2 中? Model2 还将有一个新的 CarOwner 实体 + 其他新关系(因此模型文件不同于 Model1)。这可以使用轻量级迁移还是我必须使用自定义迁移?我正在使用 Magical Record 设置我的核心数据堆栈。

多年来,我一直在成功使用轻量级迁移。所以我没有任何自定义迁移机制。我想在实施新系统之前先询问一下,以便将 CD 自定义迁移合并到我现有的 MagicalRecord 核心数据堆栈中。

编辑:更新问题以澄清 Model1Model2 存在差异。

【问题讨论】:

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


    【解决方案1】:

    使用相同的 xcdatamodel 文件和不同的版本,您可以使用映射模型文件,但作为不同的 mom 文件,我猜这些是不同的堆栈,迁移将不起作用。

    【讨论】:

    • 那么这可以使用自定义迁移吗?
    • @Buju 我不这么认为。如果您不想让她们真正分开,为什么还需要两个不同的妈妈?
    • 因为Model1 已经有很多版本了。其中一些有警告。 Model1 结构已经很老了。现在我需要将所有现有数据迁移到一个更大、更现代的新Model2。我想再次使用模型版本 1 开始 Model2
    • 但重点是,我想摆脱产生警告的旧版本。而且我有多个(旧)模型文件,我想将它们全部合并到Model2
    • 经过大量研究,结果表明可以使用自定义映射模型.xcmappingmodel 和自定义迁移将实体从一个模型文件迁移到另一个文件。
    【解决方案2】:

    模型迁移仅在模型发生更改时才相关——也就是说,如果数据模型中包含的实体与持久存储文件中保存的实体不匹配。迁移不取决于您使用的模型文件,它取决于该模型中包含的实体哈希。

    含义:如果您的新模型文件与持久存储文件具有完全相同的实体,则您实际上不需要迁移任何内容。刚开始使用新的模型文件。 但是请记住,如果您放弃旧模型文件及其所有旧版本,您将无法再从该模型的旧版本迁移。

    【讨论】:

    • 这就是重点。我需要保留所有旧版本,所以我的所有用户仍然可以迁移到最新版本。而且模型不会保持不变。它发生了变化,所以我肯定需要迁移。
    • 那么...移动到新模型文件有什么意义呢?在@Lucien 回答的 cmets 中,您谈到了您想摆脱的 Model1 的所有问题。我真的不知道你还希望完成什么。
    • 可以更准确地说:Model1 目前仅在应用程序中。但现在我需要将我的模型文件移动到(共享)库中,以便其他应用程序可以使用相同的模型文件Model2。出于这个原因,Model2 与其他实体和新关系高度增强。所以app1需要将数据从Model1迁移到Model2。但随后另一个新应用程序将开始使用 Model2 的共享库,因此 app2 不会收到来自 Model1 的所有警告。我没有解释这一点,因为我想要的正是我在问题中提出的问题。将实体迁移到另一个 Core Data 模型文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多