Ios Coredata合并关系而不是覆盖关系

Ios Coredata合并关系而不是覆盖关系,ios,core-data,Ios,Core Data,我有两个coredata实体,比如Class和Student,它们具有一对多关系(级联删除,有序)。我已对实体customId启用了唯一约束。customId不是可选的 当我用学生a和B创建一个新的ClassX对象时,它工作得很好 我更新这个对象(类)的方法是创建一个具有相同“customId”的新对象,该对象定义了所有关系。例如,现在ClassX有学生C和D。 当我保存上下文时,它将导致最后一个对象ClassX,其中包含学生a、B、C和D。 这里的期望是覆盖所有关系,X班的学生应该只有C和D

我有两个coredata实体,比如Class和Student,它们具有一对多关系(级联删除,有序)。我已对实体customId启用了唯一约束。customId不是可选的 当我用学生a和B创建一个新的ClassX对象时,它工作得很好

我更新这个对象(类)的方法是创建一个具有相同“customId”的新对象,该对象定义了所有关系。例如,现在ClassX有学生C和D。 当我保存上下文时,它将导致最后一个对象ClassX,其中包含学生a、B、C和D。 这里的期望是覆盖所有关系,X班的学生应该只有C和D

我尝试了不同的合并策略(NSMergeByPropertyObjectTrumpMergePolicy和NSOverwriteMergePolicy),但最终都合并了关系对象而不是覆盖


我是不是遗漏了什么

核心数据默认情况下为类型为
NSSet
的关系的“多对多”端创建与对象的一对多关系

NSSet
表示对象的唯一集合

当您选中对象模型编辑器中的“有序”复选框时,核心数据将提供类型为“多对多”的对象,而不是
NSSet

一套就其性质而言,如上所述,是一个独特的收藏。关于这方面的更多信息,我认为有一些关于收藏的好博客值得一读。如果我找到任何链接,我会把它们贴在这里

因此,当您将一个对象添加到“多对多”关系中时,Xcode和核心数据框架准备的样板代码将把该对象添加到一个集合中


如果你想“覆盖”。。。您需要先删除现有对象,然后添加新对象

要删除现有对象,我需要从持久存储中获取对象,这有点违背了在coredata中进行uniquing的目的。