使用 CloudKit 共享时如何正确使用数据库订阅

Posted

技术标签:

【中文标题】使用 CloudKit 共享时如何正确使用数据库订阅【英文标题】:How to use database subscriptions correctly when using CloudKit sharing 【发布时间】:2019-05-03 14:49:44 【问题描述】:

我正在研究如何处理 CloudKit 共享和数据库订阅,我需要帮助了解 Apple 如何在我们可用的属性和委托方法的情况下一起使用订阅和 CloudKit 共享。

This thread 非常相似,但没有将共享带入等式,并且在功能方面与我设置的有点不同。

设置潜艇是很容易的部分。如果没有订阅,请设置一个。如果所有者停止共享,则会调用一个委托方法,因此您可以删除除您自己之外的所有子项。当参与者离开共享时,我的问题就出现了。应该删除与该人关联的订阅,但他们现在无权访问共享数据库来执行此操作。而且我看不到将订阅与参与者 ID 相关联的方法。我能弄清楚如何做到这一点的唯一方法基本上就是其他线程中提到的。创建一个新的订阅记录类型,将参与者 ID 索引到订阅 ID。

从概念上讲,我是倒退的,并假设每个用户都对自己的订阅负责。使用新的记录类型会翻转,因此共享所有者对所有订阅负责。

真的是这样吗?任何使用共享的人都会遇到这种情况,所以我认为应该有某种方法可以在不创建另一个记录类型的情况下处理它?

【问题讨论】:

【参考方案1】:

我误解了一些非常基本和重要的事情。出于某种原因,我认为共享数据库的 subs 实际上存在于所有者数据库上,并且当共享停止时,他们将失去对数据库的访问权限并且无法删除自己的 sub。情况并非如此(显然?),因为您只能看到自己的潜艇,而所有者看不到参与者的任何潜艇。

当共享停止时,您将失去对 CKShare 记录的访问权限,但您仍然可以访问共享数据库中的子节点。因此,在需要时删除它是微不足道的 - 如果所有者负责,它将更多地参与(正如我上面所想的那样)。

【讨论】:

以上是关于使用 CloudKit 共享时如何正确使用数据库订阅的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CloudKit 中存储对共享记录的引用

无法共享 CloudKit CKShare 记录

CloudKit 订阅内部服务器错误

CloudKit 分享

您可以在不同应用程序之间共享 CloudKit 上的数据吗

CloudKit acceptShare 错误 - “无法获得共享身份集”