更改 coredata 版本时合并数据

Posted

技术标签:

【中文标题】更改 coredata 版本时合并数据【英文标题】:Merge data when change coredata version 【发布时间】:2013-11-19 08:16:19 【问题描述】:

在看问题之前,先来看看我的coredata schema:

我的 coredata 架构的版本 1:

--Entity:
<Family>, <Member>, <Note>

<Note> Attribute:
content: string

--Relationship:
Family 1-many Member
Member 1-1 Note (*)

在版本 2 中,coredata 架构:

--Entity:
<Family>, <Member>, <Note>

<Note> Attribute:
content: string

--Relationship:
Family 1-1 Note (*)
Family 1-many Member

因此,这意味着我希望将注意范围从成员升级到家庭(查看两个版本中的 *)。

问题是:如何将所有成员的所有笔记内容合并到一个大笔记中,然后添加到新家庭的笔记中。

例子:

Before:
family.mem1.note = "mem1 note"
family.mem2.note = "mem2 note"

After:
family.note = "mem1 note, mem2 note"

P/S:很抱歉问这种问题,因为我对 migrate coredata 的了解只是轻量级迁移。在这个问题上,轻量级迁移删除所有笔记,这是我不想要的选项。苹果没有太多关于迁移的文件,比如......这个。

【问题讨论】:

【参考方案1】:

您必须以编程方式执行此操作。我建议将您现有的会员笔记保留在新模型中并添加家庭笔记。现在轻量级迁移将起作用,然后在迁移完成后使用自定义函数通过迭代所有 Family.members 并将 member.note 附加到 Family.note 来更新每个 Family.note。

【讨论】:

可能不是制作应用程序的好方法...从编程上讲,我同意这部分。但是分两步分离它并使用轻量级迁移,显然不是让它工作的好方法。我想使用其他方式,例如自定义迁移或类似的方式...抱歉,您的解决方案不适合这里。

以上是关于更改 coredata 版本时合并数据的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 合并冲突显示托管对象版本更改而不是数据

如何在 Swift 4 CoreData 中设置合并策略

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

合并更改的 CoreData 和 NSFetchedResultsController

iOS:SharedCoreData 示例代码 (iCloud + CoreData) |如何合并更改

合并 NSManagedObjectContexts 之间的更改(多线程)