在Core Data中以多对多关系模型选择单个对象的最佳方法

时间:2011-12-04 19:12:59

标签: objective-c core-data

我想在核心数据中使用以下示例的模型:

假设有两个托管对象OwnerItem,其中Owner与一组Item的多对多关系表示Item它拥有。 Item具有一对一的反比关系,表明其Owner。另外,我希望Owner保存对当前正在选择/使用/等的特定Item的引用。以下是这种情况的完美解决方案:

  1. Owner可以快速方便地访问其选定的Item,理想情况下与访问任何正常的一对一关系的方式相同。
  2. 选定的Item只能设置为Owner的{​​{1}}列表中的对象。 AKA无法将所选Item设置为尚未拥有的Item
  3. Item拥有自己的BOOL属性,该属性始终是最新的,并指示它们是否由Item选中。如果选中它并且我想知道Owner,我将使用其他反向关系属性。
  4. 一般情况下,保持所有内容自动且最新是很好的,例如,如果OwnerItem中设置的Item中删除了Owner ,然后它也会自动取消选择。
  5. 我已经尝试过一些有限的解决方案,这些解决方案不能满足我上面所有的理想要求,但确实可以正常工作。例如,现在我有两个关系,一对多关系表示所有拥有的Item以及一对一关系,将当前选定的Item链接回其Owner。这有效,但要求我在代码中的每个地方都要非常小心,以确保事情不会变得不一致。此外,选定的Item具有两个单独的一对一关系,返回其Owner。这对我来说似乎是糟糕的设计,因为如果他们在进行更改时不一致地更新所有内容,那么程序员就有很多机会搞砸关系。

    所以我的问题是,是否有其他人有更好的解决方案来解决这个问题?我对如何做得更好有更多的想法,但对我来说似乎没有什么方便,我想知道这是否已经解决了这个问题。

1 个答案:

答案 0 :(得分:0)

马特,

使用所选项目的自定义访问器可能最容易解决您的问题。你坚持选定的州吗?如果没有,那么与自定义访问者的一对一临时关系来强制执行您的成员资格约束将很好地适应该法案。 BOOL存储为NSNumber,从我所看到的,并没有比具有反向关系的空间效率更高。

安德鲁