如何在 Core Data 中存储一组自定义(和重复)对象?

Posted

技术标签:

【中文标题】如何在 Core Data 中存储一组自定义(和重复)对象?【英文标题】:How do I store an array of custom (and repeating) objects in Core Data? 【发布时间】:2016-09-11 19:08:47 【问题描述】:

我的应用有可以放置在团队中的 Monster 对象。同一种怪物可以多次出现在一个团队中,这一点至关重要。每队包含 6 只怪物。

最初我在团队和怪物之间建立了一对多的关系。但是斯威夫特的套装不允许同一种怪物在一个团队中出现两次。这是一个问题,因为我的应用需要能够让同一个怪物多次出现在团队中。

我已阅读可以使用可转换或二进制类型在 Core Data 中存储数组。不幸的是,大多数资源不在 Swift 中,我无法转换。这些途径之一会是我需要的解决方案吗?如果是这样,我应该使用可转换的还是二进制的?最后(也是最重要的)如何存储和检索自定义对象数组?我以前从未使用过 NSCoding,不知道从哪里开始。

【问题讨论】:

你有没有想过使用团队、怪物和物种 3 个实体? 不会遇到同样的问题吗?这一次在一个团队中不止一次地添加了相同种类的怪物。关键是每队有 6 个插槽,这些插槽可以多次填充同一个生物。 Core Data 似乎更适合处理我们列出该团队中出现的所有物种的情况,但不列出占据插槽的成员本身,因为这些可以重复。 在这种情况下你不应该依赖集合。你的数据模型以前是合理的。由于同一类型的怪物可以有多个,所以需要用其他方法来区分。 【参考方案1】:

我将添加第三个实体,而不是使用可转换或二进制属性:TeamMembershipTeamMembership 对象表示 Monster 的单个实例,它是单个 Team 的成员。所以TeamMembership 对象将与MonsterTeam 具有一对一的关系。

每个Team 将有六个成员,因此它将与TeamMembership 具有一对多关系。同样,每个Monster 都可能是多个Teams 的成员(或者实际上是同一Team 的成员多次),因此它同样与TeamMembership 具有一对多关系。

关系图如下所示:

使用此设置,完整的 Team 将与六个独立的、不同的 TeamMembership 对象相关联。这些对象中的每一个都将与一个Monster 相关联。但是完全有可能两个(甚至全部六个)TeamMembership 对象与同一个 Monster 相关,这(我希望)满足您的要求。不利的一面是,将Monster 添加到Team 涉及创建一个新的TeamMembership 对象并设置其与相关TeamMonster 对象的关系,而不仅仅是直接设置它们之间的关系。

【讨论】:

您好 pbasdf,我对您的回答很感兴趣。感谢分享!你能澄清一件事吗?如果我的团队中有两个相同怪物的实例,这意味着我的团队有一组 TeamMemberships。在那个系列中,具有相同属性的怪物的两个实例不会仍然减少到该系列中的单个实例吗?或者 CoreData 会认识到它们是不同的,即使 TeamMembership 中的怪物是相同的。 该集合将包含不同的 TeamMemberships,即使它们本身可能与同一个 Monster 有关。

以上是关于如何在 Core Data 中存储一组自定义(和重复)对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Parse 中存储一组自定义对象?

Core Data 中带有自定义对象的可转换集合

如何从一组自定义字段值中显示 Wordpress 帖子

如何线程安全存档一组自定义对象?

如何将一组自定义结构保存到 plist swift

如何为一组自定义分类页面创建可变页面标题