如何使用核心数据设计对象的"ordering"



我有一个项目符号对象和一个列表对象。一个列表包含许多项目符号,一个项目符号可以属于多个列表。

但是我需要保证 Bullet 对象的顺序。例如,List 对象应始终按该顺序具有 #1 项目符号 A #2 项目符号 B 和 #3 项目符号 C。另一个列表(列表 B)可能具有相同的项目符号,但顺序不同,#1 项目符号 B、#2 项目符号 C 和 #3 项目符号 A。

NSSet 不存储排序,核心数据不允许阵列。

我该怎么办?我可以在这里对属性做点什么吗?

编辑:听完下面的评论后,我意识到列表和项目符号之间存在"多对多"的关系......例如,项目符号(名称:"鸡蛋")可以出现在列表(名称:"乳制品")和列表(名称:"食物")中。

我会插入第三个实体,比如说 BulletsInList,带有一个属性,您可以在其中存储您的排序位置(1、2、3 等)。

您现在可以在项目符号和项目符号列表之间建立关系,而不是列表和项目符号列表之间的关系(一个项目符号可以包含在多个项目符号列表中,一个项目符号列表只属于一个项目符号列表),另一个在列表和项目符号列表

之间建立关系(一个列表可能有多个项目符号列表,一个项目符号列表只属于一个列表)。

简而言之,BullettsInList 对象包含:1 个列表对象、1 个项目符号对象和 1 个位置的数字属性。

使用有序关系。它映射到 NSOrderedSet。

使用有序关系是一种选择,但iCloud不允许这样做,所以如果您打算在iCloud上使用核心数据,请不要使用它们,否则将来会很痛苦(根据我自己的经验)。

我推荐的解决方案是扩展 List NSManagedObject,我们称之为 List+Additions,在该扩展中,您可以使用返回根据需要排序的 NSSet 的方法。

最新更新