在Core Data中替换多对多关系中的实体

时间:2011-08-05 23:14:18

标签: ios core-data entity-relationship

当我从一对多关系的一侧检索实体时,我从集合中创建一个可变数组,该数组是关系中的实体集合。我操纵,编辑或以其他方式更改这些实体,可能删除现有或添加新实体。 通过更改后,我只需使用数组创建一个新集,然后将原始集替换为我创建的集,如下所示:

self.myOneSideEntity.theManySideEntitiesRelationship = [NSSet setWithArray:myNewArrayOfEntities];

我想到更换套装可能不会删除旧会员。他们发生了什么?这是编辑相关对象集合的正确方法吗?我是否会留下任何类型的孤儿或违反最佳做法?

我的关系设置为一方面是反向级联删除,多方面无效,反向关系不是可选的。

2 个答案:

答案 0 :(得分:5)

我花了几天时间来理解我的应用程序中的类似行为。

Relation的“删除规则”仅在包含关系的对象本身被删除时才起作用。如果您只是将一组对象替换为另一组(就像您一样) - 没有任何反应。旧集合中的子对象将简单地将反向关系设置为nil。因此,如果该关系(来自子端)不是可选的,则在保存上下文时会出现CoreData错误。

目前我没有找到任何方法来管理它,除了手动删除旧对象。

答案 1 :(得分:0)

对我来说,问题在于获取与当前对象连接的对象。 (groupObject.docs) 当我添加用于获取此数据的上下文时,它已得到解决。 我正在使用MagicalRecord:

[GroupObject MR_findAllInContext:[NSManagedObjectContext MR_defaultContext]]

而不是

[GroupObject MR_findAll]