如何正确删除NSManagedObject关系

时间:2013-11-16 15:55:22

标签: ios core-data nsmanagedobject

我有以下实体和关系:

Entity0, EntityA, EntityB, EntityC

Entity0可以包含0个或多个EntityA。 EntityA与EntityB具有一对一的关系“entityB”(反向是“itemB”)。 EntityC与EntityB具有多对多关系“entityBs”(反向是“itemC”)。 所有关系的删除规则都是“Nullify”。

我创建了一个EntityA并将一个EntityB绑定到它。 然后我创建了一个EntityC并将该EntityB绑定到它。

在删除EntityA期间,我这样做......

self.entityA.entityB = nil;
[self.entity0 removeEntityAObject:self.entityA];

现在,我期待与EntityC绑定的“entityBs”也将被删除。但是,当我试图从EntityC

获取“entityBs”的细节时
NSLog(@"details %@", self.entityC.entityBs);

我在第一次通话时收到此错误:

entityBs = "<relationship fault: 0x1557abb0 'entityBs'>";

然后我点击后退按钮并再次选择EntityC以再次检索详细信息。然后我明白了:

entityBs =     (
    "0x1669b8b0 <x-coredata://12REF41B-4A7D-4A51-B6BC-2RHRI5DC3124/EntityB/p22>"
);
status = 0;
}) with objects {(
<EntityB: 0x166ac100> (entity: EntityB; id: 0x1669b8b0 <x-coredata://12REF41B-4A7D-4A51-B6BC-2RHRI5DC3124/EntityB/p22> ; data: <fault>)

就好像实体B仍在那里。 我该如何正确执行删除?

1 个答案:

答案 0 :(得分:3)

B实体仍然存在,因为您已将删除规则设置为无效(并且您实际上没有删除任何内容,您只是删除了引用)。要删除B实体,您需要做三件事:

  1. 将关系的删除规则从A设置为B到级联
  2. nil对B的引用(来自A)
  3. 实际上从上下文中删除A