【问题标题】:Having multiple time the same object in a core data one-to-many relationship在核心数据一对多关系中多次使用同一个对象
【发布时间】:2014-04-16 13:20:28
【问题描述】:

我的核心数据模型中有两个实体:图书馆和书籍。它们通过 Library 和 Book 之间的 To Many 关系链接。
但是,在我的示例中,我的图书馆中有两次完全相同的书,当我尝试将它们添加到我的图书馆时,只出现了一本。我搜索了一下,发现在 Library 对象中,书籍存储为NSSet
有谁知道我如何将这些书存放在 NSArray 中?

【问题讨论】:

    标签: core-data nsarray magicalrecord nsset


    【解决方案1】:

    您不能(好吧,除非您取消 Book 实体并使用可转换属性,但这不是一个好的解决方案)。

    显而易见的选择是将count 属性添加到您的Book 实体上,这样您就可以记录您拥有这本书的数量。这可能对您的其他设计产生什么影响是您需要考虑的。

    【讨论】:

    • 是的,这是我正在考虑的解决方案,但我希望有更好的解决方案。你能解释一下什么是可转换属性吗?
    • 在信息检查器中(您将类型设置为字符串/整数/等),您可以选择可转换的。结果是二进制数据存储。所以你不能在任何谓词中使用它。不是一个好选择...
    • 确实如此。感谢您的回答!
    【解决方案2】:

    在 Xcode 侧边栏中,有一个名为“有序关系”的复选框,但正如 Wain 所说,这不会解决重复问题。但是,它将使其将书籍保存在有序集合中 (NSOrderedSet)。

    我将创建一个新实体LibraryBook,它与Book 具有一对一关系,与Library 具有一对一关系。您可以将两个LibraryBooks 放在一个Library 中,它们都指向同一个Book

    【讨论】:

    • 有序集合中仍然不能有重复项
    • 好吧,这是否真的是问题的一部分是有争议的,没有明确要求订单,重复是
    • 对不起,误解了这个问题。更新了!
    • 是的,我实际上是在询问重复而不是订单。抱歉,我的问题不清楚。
    • NSOrderedSet 不像NSArray,它有顺序,但它仍然是一个集合,集合不能包含重复项。基于实体的解决方案很好(虽然可能有点重,具体取决于重复存在的频率)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2015-08-05
    相关资源
    最近更新 更多