如何在 CloudKit 中创建记录作为孩子的记录列表?

Posted

技术标签:

【中文标题】如何在 CloudKit 中创建记录作为孩子的记录列表?【英文标题】:How do I make a record in CloudKit have a list of records as a child? 【发布时间】:2016-06-17 13:42:03 【问题描述】:

我想在私有数据库中有一条表示购物清单的记录,然后我希望有该购物清单的子记录来表示购物清单上的项目。我想知道这是否可能,如果是的话,我应该将它实现为购物清单记录的子记录,还是应该将“项目”作为 NSArray 类型的“购物清单”记录的属性,然后添加项 CKRecords 到该数组。

文档中并不清楚 CKRecord 是否可以是另一个 CKRecord 的子项。

【问题讨论】:

【参考方案1】:

有一种记录类型来表示您的购物清单,另一种记录类型来表示购物清单上的物品。

在您的购物清单记录类型中,有一个字段是 CKReferences 数组,每个 CKReferences 都指向一个项目记录。

在您的项目记录类型中有一个 CKReference 字段,它指向购物清单(例如,称为 isOnShoppingList)并将其 CKReferenceAction 设置为 DeleteSelf。这将确保如果购物清单被删除,该项目也会被删除。

(编辑:使用 CKReferenceAction = DeleteSelf 添加反向引用。)

【讨论】:

【参考方案2】:

According to Apple,最好“围绕一个中心记录类型组织你的记录”。这可能是您的购物清单记录。然后,您的购物清单项目记录将成为可能的许多“支持主要类型的附加记录类型”之一。

为了将两者联系起来,Apple 建议我们在 "Introducing CloudKit (Session 208) at WWDC 2014 中使用他们称之为“反向引用”的东西。这将包括让您的购物清单项目记录保持对与其关联的购物清单的引用,而不是相反。这使得查询不那么密集,因为您可以简单地使用列表的 Id 获取列表项记录,而不是使用每个列表的每个项搜索引用数组。此外,这种设计更接近于显示购物清单列表的正常应用界面设计,然后在选择购物清单后显示商品列表。

【讨论】:

以上是关于如何在 CloudKit 中创建记录作为孩子的记录列表?的主要内容,如果未能解决你的问题,请参考以下文章

在 Cloudkit 中创建 CKRecord?

在 CloudKit 仪表板中创建布尔字段

未收到CloudKit推送通知

在 CloudKit 中创建指向多个 CKRecord 的引用列表

CloudKit 不检索应该存在且可检索的记录

如何在 CloudKit 中创建用户? [关闭]