将两个 CoreData 关系(具有反向关系)分配给同一个实体

Posted

技术标签:

【中文标题】将两个 CoreData 关系(具有反向关系)分配给同一个实体【英文标题】:Assigning two CoreData relationships (with inverse relationships) to the same entity 【发布时间】:2011-02-23 08:51:18 【问题描述】:

在我的 CoreData 模型中,我有一个与特定 Activity 实体配对的 Event 实体。目前,我在 EventActivity 之间有一个可选的关系,称为 LatestActivity。我现在正在寻找专门为 NextActivity 创建一个新关系,但意识到不可能将两个关系的逆向设置为同一个实体。

我理解为什么由于 SQlite 后备存储而无法做到这一点,但我想知道如何最好地去做。经过一番谷歌搜索后,我看到的最佳解决方案如下:在我的 Event 实体中设置一个名为 Activities 的一对多关系,然后设置辅助函数获取并返回最新和下一个活动。

这很好,因为它允许我在未来将多个活动附加到事件,但我对在哪里以及如何实现这些辅助函数感到困惑。将使用以下逻辑通过比较 Activity 实体中的 NSDate 来获取下一个和最新的事件:

最新活动表示当前日期之前的最近日期 下一个活动表示日期大于现在的下一个活动

但是,在 CoreData 中搜索这些实体的最简洁方法是什么?我应该在哪里进行搜索?

【问题讨论】:

【参考方案1】:

当您说您“意识到不可能将两种关系的倒数设置为同一个实体”时,我可能不明白您的意思。考虑这个模型:

很明显,两个实体之间可以有多个双向关系。在这种情况下,存在三种双向关系:

    Event 的活动 > Activity 的事件(从 Event 的角度来看是对多) Event 的 lastActivity Activity 的 inverseLastActivity Event 的 nextActivity Activity 的 inverseNextActivity

当然,您仍然需要使 lastActivity 和 nextActivity 保持最新 - 而且,也许您提出的实时推导它的建议可能更可靠。

我一直担心我误解了你的问题...

【讨论】:

以上是关于将两个 CoreData 关系(具有反向关系)分配给同一个实体的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 关系混乱

CoreData:通过关系访问对象

RestKit 直接 + 反向关系映射

CoreData 关系延迟加载?

CoreData 中的逆关系是啥

如何删除具有两个关系的“反向实体”