迁移复杂的核心数据模型

Posted

技术标签:

【中文标题】迁移复杂的核心数据模型【英文标题】:Migrating complex core data model 【发布时间】:2011-10-04 23:56:08 【问题描述】:

我有几个关于核心数据模型迁移的问题。

我有一个非常复杂的数据模型,其中包含几个实体继承案例。我打算在新版本中对数据模型进行一些更改并尝试设置迁移,但是当它迁移商店时,我丢失了一些属于从另一个实体继承的实体的数据。

在我的例子中,我有几个实体都继承自“资源”实体。该资源实体具有属性“名称”。当我尝试迁移数据存储时,从“资源”实体继承的所有实体都会丢失其名称。

他们有什么方法可以让模型迁移适用于具有继承的数据模型吗?我已经发布了一个测试版,我需要对模型进行一些更新,但我显然不希望用户丢失他们的所有数据。

谢谢

【问题讨论】:

【参考方案1】:

尝试使用Column properties > Versioning > Renaming identier 在您的新模型上“播放”,输入以前的字段名称,我猜它是相同的。我怀疑这是否适用于继承,但值得一试...... (这个没有记录的功能,允许跨重命名保留数据,救了我好几次)

如果这不起作用,恐怕您必须进行“手动迁移”......使用模型映射和其他东西......这有点复杂。请参阅有关此主题的 Apple 文档...然后我建议您只回滚您的更改并忘记继承,更快更容易,即使它不那么“干净”。或者只是假设您的用户会丢失一些数据,在 beta 阶段这并不重要...(或者您可以在迁移模型然后重新填充之前收集内存/plist 文件中的旧数据)

祝你好运! CoreData 自动模型迁移很棒,但请注意它仅适用于简单的修改...


哦,又是一个技巧,将-com.apple.CoreData.SQLDebug 1 添加到您的应用启动参数中,您将获得CoreData 生成的所有sql 请求...这可能有助于您了解迁移过程。 (以及其他一些事情......)

【讨论】:

我很好地尝试使用模型映射。无论如何,我需要它们来支持豹。但问题是,即使使用模型映射,它似乎也不能正常工作。但我会尝试有关 SQLDebug 的建议。谢谢

以上是关于迁移复杂的核心数据模型的主要内容,如果未能解决你的问题,请参考以下文章

核心数据模型迁移

iOS:备份核心数据并使用较新的模型版本进行恢复

核心数据迁移问题:“持久存储迁移失败,缺少源托管对象模型。”

没有找到适合核心数据迁移的映射模型

核心数据模型版本控制和数据迁移

使用拆分核心数据模型进行迁移