【问题标题】:How to correctly delete NSManagedObject relationship如何正确删除 NSManagedObject 关系
【发布时间】:2013-11-29 23:46:09
【问题描述】:

我有以下实体和关系:

实体0, 实体A, 实体B, 实体C

Entity0 可以有 0 个或多个 EntityA。 EntityA 与 EntityB 具有一对一的关系“entityB”(相反是“itemB”)。 EntityC 与 EntityB 具有多对多关系“entityBs”(相反是“itemCs”)。 所有关系的删除规则都是“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 还在那里。 我应该如何正确执行删除?

【问题讨论】:

    标签: ios core-data nsmanagedobject


    【解决方案1】:

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

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

    【讨论】:

    • 对于#3,你的意思是做 [self.entity0 removeEntityAObject:self.entityA];并调用 [self.managedObjectContext save:&error] 不足以从上下文中删除 entityA?...那我应该如何从上下文中删除 entityA?
    • 或者在我调用保存之前,我需要专门从上下文中删除 entityA... [self.managedObjectContext deleteObject:self.entityA];?
    • 您需要致电deleteObject:
    • removeEntityAObject: 只是从关系中删除,而不是从上下文中删除
    • 哦……这就是我一直在寻找的东西……因为我一直在删除和删除关系引用时遇到问题……一直以来我都认为我不需要在子实体上调用 deleteObject :)...非常感谢您的帮助
    猜你喜欢
    • 2013-12-20
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多