核心数据反向关系未设置

Posted

技术标签:

【中文标题】核心数据反向关系未设置【英文标题】:Core Data inverse relation does not get set 【发布时间】:2010-09-06 12:13:54 【问题描述】:

我有一个对象 A,它与 B 有一对多关系。B 有一个属性 A,它与 A 的 NSSet 成反比关系。

伪代码:

A类 NSSet *bConnections; B类 一个*一个连接;

在模型中,我将关系设置为可选。对于A,关系定义为一对多,B处aConnection的逆和删除规则级联。

B 定义为可选,bConnection 的逆和删除规则无效。

当我创建对象并使用[aInstance setValue:setOfBs forKey:@"bConnections"] 将 Bs 的 NSSet 添加到 A 时,B 中的反比关系不会自动设置。我究竟做错了什么?不应该从 Core Data 自动更新吗?

对象初始化为:initWithEntity:entityDescription insertIntoManagedObjectContext:managedObjectContext

【问题讨论】:

【参考方案1】:

您需要使用mutableSetValueForKey: 来获取关系的现有集合。然后,您修改该集合并自动设置正确的键值观察方法,以便维护对象图的完整性。

【讨论】:

【参考方案2】:

我可能已经找到了解决办法;我确实更新了从 A 返回的现有 NSSet 以添加新的 B。当我分配一个新的 NSSet 并添加对象时,引用似乎没问题。这些对象是从外部 JSON 服务创建的,我想我可以只更新 A 中现有的 B 集,但是反向关系设置不正确。

【讨论】:

以上是关于核心数据反向关系未设置的主要内容,如果未能解决你的问题,请参考以下文章

iPhone核心数据得到孙子

核心数据:总是有反向关系。为啥?

如何创建从一个实体到另一个现有实体的核心数据关系?

核心数据:EXC_BAD_ACCESS 访问关系

是否可以在核心数据模型中自动创建反向关系?

从核心数据获取请求中排除反向关系