【问题标题】:How to design "ordering" of objects with Core Data如何使用 Core Data 设计对象的“排序”
【发布时间】:2014-11-23 16:59:26
【问题描述】:

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

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

NSSet 不存储排序,Core Data 也不允许数组。

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

Edits:听了下面的cmets,我意识到列表和项目符号之间是“多对多”的关系......例如,一个Bullet(名称:“Egg”)可以出现在列表中(名称: “乳制品”)和清单(名称:“食品”)。

【问题讨论】:

    标签: ios objective-c oop core-data nsset


    【解决方案1】:

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

    现在您可以在 Bullet 和 BulletsInList 之间建立关系,而不是 List 和 Bullet 之间的关系(一个 BulletsInList 可以包含在多个 BulletsInList 中,一个 BulletsInList 恰好属于一个 Bullet)以及 List 和 BulletsInList 之间的另一个关系(一个 List 可能有许多 BulletsInList,一个 BulletsInList 恰好属于一个 List)。

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

    【讨论】:

    • 有道理,谢谢...与使用以下“有序关系”相比,这种方法有什么优势吗??
    【解决方案2】:

    使用ordered relationship。它映射到NSOrderedSet

    【讨论】:

      【解决方案3】:

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

      我推荐的解决方案是扩展 List NSManagedObject,我们称之为 List+Additions,在这个扩展中,你可以有一些方法来返回你想要的 NSSet。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-18
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多