如何将实体上的属性迁移到 Core Data 中的实体

Posted

技术标签:

【中文标题】如何将实体上的属性迁移到 Core Data 中的实体【英文标题】:How to migrate an attribute on an entity to an entity in Core Data 【发布时间】:2012-11-20 06:02:57 【问题描述】:

我正在努力解决一个相当复杂的核心数据映射问题,我似乎无法理解。基本上,我有一个托管对象的版本,其属性是一个字符串。该字符串在许多对象中都是相同的。由于它是相同的,我认为将其更改为具有“名称”属性的单个实体是有意义的。

entity.attribute 应该变成 entity.newObject.name,其中属性和名称都是字符串。

为了使事情复杂化,我希望该属性,目前在许多实体中拆分,成为一个实体的单个实例。此外,新实体应该与具有与 newObject.name 匹配的属性的对象具有一对多的关系。

有什么方法可以通过 Core Data 中的映射模型来做到这一点?我知道自动迁移是不可能的。

我想从这里开始:

Diagram of current model

到这里:

Diagram of wanted model

我这样做是为了加快在特定会话中匹配特定拼图类型的时间的获取请求。想法是 -[NSSet intersectSet] 比将每个时间的拼图类型属性与字符串进行比较要快得多。我将如何通过映射模型或以编程方式执行此操作?

【问题讨论】:

【参考方案1】:

您可以使用自动迁移,只是不能自动推断映射。

高级任务将是:

    创建一个新的模型版本。 根据需要配置新模型。 将新模型版本设置为当前版本。 创建从旧版本到新版本的映射模型,您将在其中设置 $source.attributes 映射到哪些新属性。 在配置持久存储协调器时将 NSInferMappingModelAutomaticallyOption 选项设置为 NO。 将 NSMigratePersistentStoresAutomaticallyOption 选项保留为 YES。仅当您想使用迁移管理器显示迁移进度时,才将其设置为 NO。

如果您需要对这些项目中的任何一个进行更深入的说明,请告诉我。

【讨论】:

以上是关于如何将实体上的属性迁移到 Core Data 中的实体的主要内容,如果未能解决你的问题,请参考以下文章

执行 Core Data 迁移时,如何从不同实体的源存储中继承旧值?

iOS - 如何使用 Core Data 将 2 个实体迁移到 1 个?

如何将一个 Core Data 模型迁移到一个全新的模型?

在 Core Data 中进行重量级迁移时尝试迁移 nil 属性值

Core Data 自动迁移不会在我的新模型中创建新实体

如何将日期类型保存到 Swift Core Data 中实体的属性?