1

我一直在想办法解决我的问题,但我能想到的每一个解决方案都很混乱,让我想干呕。

我有一个一对多的关系,由一个可以有许多 Member 对象的 Team 对象组成。当我使用 Xcode 构建我的数据模型时,我得到了存储成员对象的默认 NSSet,不幸的是,集合没有排序,我需要保留成员对象的顺序,我需要知道之间是否有空格成员。

我想过使用 NSArray 代替 NSSet 并在我的数据存储中创建一个虚拟的 Member 对象,我可以用它来标记 Member 对象之间的空白点,但是这个解决方案对我来说真的太难了。因为我总是必须从任何查询中过滤掉这个虚拟成员。

NSDictionary 将是完美的,因为我可以将成员对象引用及其位置存储为对象键对(同时处理顺序和空缺),但显然 CoreData 不支持 NSDictionary。

有没有人有类似的需求,并设计了一个简单的解决方案?

4

2 回答 2

4

有序关系很容易实现。这是我为 NSManagedObject 子类之一所做的代码。

(由于某种原因,我今天无法将格式化的代码发布到 Stackoverflow。)

在这种情况下,我建立了如下关系:

AlphaEnity<-->>AlphaToBetaEntity<<-->BetaEntity

AlphaToBetaEntity 有一个order属性。我对 AlphaToBetaEntity 进行排序,然后根据需要返回链接的 BetaEntity。这就像在老派 C 中进行指针排序一样。

它的优点是在非常大的集合上快速起泡,并且在需要从中读取属性之前,您不必在 BetaEntity 中出错。

于 2010-03-20T20:46:42.473 回答
3

缺乏有序的核心数据对多关系是底层数据库设计的产物。这个 Cocoa 邮件列表线程中讨论了这种情况的原因以及潜在的解决方案。解决方案包括将索引属性添加到您的托管对象或在链接列表中维护这些对象。

如果你不想自己做,Brian Webster 已经在这里整理了一个有序对多的核心数据关系的实现

最后,如果您希望摆脱 Core Data,Aaron Hillegass 的新BNRPersistence 框架支持有序关系。

于 2010-03-20T20:31:01.963 回答