核心数据关系删除操作 - 级联与无效与拒绝与无操作

时间:2010-06-26 12:47:35

标签: iphone core-data

核心数据让我陷入困境。我有两个对象:Card和CardSet,它们之间存在多对多的关系,即你可以在CardSet A中使用卡1,2和3,在CardSet B中使用卡2,4和5。

我正在尝试设置我的删除操作,以便:

  1. 如果我删除了一张卡,它将从其所属的所有CardSet中删除。 (即删除卡2,然后CardSet A = {1,3}且CardSet B = {4,5})
  2. 如果删除CardSet,则删除该组中的所有卡除了属于另一组的卡。即删除CardSet A,然后CardSet B保持{2,4,5}。
  3. 我的数据结构有两个关系,它们定义了这种多对多关系:CardSet.cards和Card.cardSets。 CardSet.cards的删除操作是cascade(所以如果我删除了CardSet,它的所有卡都被删除了),我对Card.cardSets的删除操作是null(所以我删除了一张卡,卡片也没有核心。

    但是,如果我删除CardSet A,那么当前的设置,则CardSet B仍然是{2,4,5} BUT 卡2实际上已从数据存储中删除,从而导致核心数据尝试访问CardSet时出错。我应该在这做什么,以确保如果卡仍然被另一个CardSet持有,那么它们不会被删除?

1 个答案:

答案 0 :(得分:3)

您想将Card.cardsets设置为deny而不是null。这样,在卡不再与任何CardSet相关之前,卡不会被移除。

来自Core Data Programming Guide

  

拒绝

     

如果至少有一个物体   关系目的地,然后   源对象无法删除。

     

有关   例如,如果要删除a   部门,你必须确保所有   该部门的员工是   首先转移到其他地方(或   解雇了!)否则部门   无法删除。