ios - 如何正确删除 NSManagedObject 关系

标签 ios core-data nsmanagedobject

我有以下实体和关系:

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

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

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

在删除 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 还在那里。
我应该如何正确执行删除?

最佳答案

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

  • 设置A到B关系的删除规则为级联
  • 不是 nil对 B 的引用(来自 A)
  • 实际上从上下文中删除 A
  • 关于ios - 如何正确删除 NSManagedObject 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20020463/

    相关文章:

    ios - 拍照前访问设备相机曝光值

    ios - 如何修复segue后新 View 的显示?

    ios - Xamarin IOs,传递给 textStyle 参数的 UIFontMetrics.GetMetrics 方法的字符串值是什么?

    swift - 如何初始化一个新的 NSManagedObject 并在单个托管对象上下文中设置与另一个 NSManagedObject 的关系?

    ios - 在 iPhone 的 safari 中通过应用程序打开谷歌地图

    ios - 访问核心数据中的子对象时出现关系错误

    core-data - 如何在托管对象上下文之外使用核心数据对象?

    ios - 创建单独的 NSManagedObjectContext 时出错

    ios - Swift 核心数据无法在 NSManged ObjectClass 上调用指定的初始值设定项

    ios - CoreData 谓词和获取输入需要很长时间