在核心数据一对多关系中多次使用同一个对象

Posted

技术标签:

【中文标题】在核心数据一对多关系中多次使用同一个对象【英文标题】: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 中?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

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

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

【讨论】:

有序集合中仍然不能有重复项 好吧,这是否真的是问题的一部分是有争议的,没有明确要求订单,重复是 对不起,误解了这个问题。更新了! 是的,我实际上是在询问重复而不是订单。抱歉,我的问题不清楚。 NSOrderedSet 不像NSArray,它有顺序,但它仍然是一个集合,集合不能包含重复项。基于实体的解决方案很好(虽然可能有点重,具体取决于重复存在的频率)。

以上是关于在核心数据一对多关系中多次使用同一个对象的主要内容,如果未能解决你的问题,请参考以下文章

核心数据一对多关系在获取新对象后失去关系[重复]

获取核心数据对象,其中一对多关系包含集合中的所有对象

iphone核心数据:无法删除具有一对多关系的数据

iOS:具有一对多关系的核心数据更新对象

核心数据 - 具有一对多关系的实体正在检索除“关系”实体之外的所有实体对象的属性

一对多关系核心数据只保存最后一个对象。其他人不见了