如何正确级联删除Core Data中的托管对象?

CJ.*_*CJ. 15 cocoa cascade core-data data-modeling

我有一个核心数据模型,它有三个实体:A,B和C.A与B有一对多的关系,B与C有多对多的关系.A的删除规则 - > B是"Cascade",B - > A是"No Action".B - > C的删除规则是"No Action",C - > B是"Deny".

我在A实体上执行删除时遇到问题.我想要发生的是以下内容:

  1. 我删除了一个A的实例(使用deleteObject:)
  2. 删除传播到与A关联的任何B(由于"级联"删除规则)
  3. 与A关联的所有B都将被删除
  4. 属于C的任何关系,其关联的B被删除,也被删除

这可能有点令人困惑,所以让我解释一下:当删除A时,删除所有关联的B.任何引用那些B的C都不能再引用它们了.

在我的测试中,我没有看到"Cascade"删除规则对我起作用.当我删除A时,我会processPendingChanges立即调用(只是为了确保删除已完成).然后我比较删除之前和之后NSManagedObjectContext中A和B的数量.A的实例已被正确删除,(总A的数量现在比删除前少一个).但是,B的数量保持不变.因此,似乎没有尊重"级联"删除规则.

我知道我可以手动完成A - > B关系,并手动删除每个B.然而,看起来这是Core Data免费提供的东西,所以除非Core Data不足,否则我不想这样做.有关使用"级联"删除规则的任何信息都是受欢迎的.

Six*_*tto 16

我当然不是核心数据专家,但是阅读各种删除规则选项文档,在我看来,你希望B - > C关系是Nullify,而不是No Action.也许Bs不会消失,因为Cs仍然持有他们的参考?