Core Data 关系的自定义设置器以强制反向互惠关系

Posted

技术标签:

【中文标题】Core Data 关系的自定义设置器以强制反向互惠关系【英文标题】:Custom setter for Core Data relationship to force inverse, reciprocal relationship 【发布时间】:2011-04-26 19:29:26 【问题描述】:

我想为一个NSManagedObject核心数据一对多关系(Object.related)创建一个自定义setter,这样当对象A添加到B.related时,B会自动添加到A.related中,如果A 从 B.related 中删除,B 自动从 A.related 中删除。我之前已经能够为基本属性(例如 NSString 和 NSNumber 属性)创建自定义设置器,但这让我有些头疼。当我的函数-(void)setRelated:(NSSet*)newSet 被调用时,似乎Self.related 属性已经用newSet 列表设置了!这里的最佳做法是什么?我还研究过使用 didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects 观看此属性,但无法使其正常工作。

【问题讨论】:

【参考方案1】:

关系的倒数由 CoreData 管理(如果您在模型中设置了它)。如果您尝试手动执行此操作,将会遇到各种麻烦。

逆是所有关系的属性,如果未在建模工具中设置它们,您应该会收到警告。

【讨论】:

比尔,谢谢你的回答,也许我不是很清楚,但是 A 和 B 是同一种对象。因此,当我将 A 添加到 B.related 时,B 不会自动成为 A 的 A.related 的一部分。 你必须有 2 个自引用关系,一个是 toOne 另一个是 toMany 然后它们是彼此的逆,同样适用于 A ->> B。

以上是关于Core Data 关系的自定义设置器以强制反向互惠关系的主要内容,如果未能解决你的问题,请参考以下文章

不要 nil Core Data 反向关系

插入时不调用 Core Data 的自定义验证方法

在 Swift Core Data 中保存没有关系的实体

在 Core Data 中定义关系类型

追加多个大data.table;使用 colClasses 和 fread 的自定义数据强制;命名管道

Core Data 属性的自定义 Getter