如何找出 CloudKit 订阅何时被删除?
Posted
技术标签:
【中文标题】如何找出 CloudKit 订阅何时被删除?【英文标题】:How to find out when a CloudKit Subscription is deleted? 【发布时间】:2019-04-18 07:32:53 【问题描述】:我在我的 ios 应用程序中使用 CloudKit。
在我的应用程序中,每当用户修改某些数据时,我都会更新 CloudKit 私有数据库,以便用户的其他设备也可以更新。
用户可以启用/禁用此同步机制。
当用户启用同步时,我创建订阅并将本地数据推送到 CloudKit。
如果用户已登录到其他设备,他们会按预期开始收到有关私有数据库更改的远程通知。
应用程序显示UISwitch
供用户启用/禁用同步。
假设用户有 2 个设备 DeviceA
和 DeviceB
,这表明通过将 UISwitch.isOn
设置为 true 已启用同步。
如果用户在 DeviceA
上禁用同步,则订阅将被删除,并且在 DeviceA
上所做的更改不会像预期的那样触发对DeviceB
的远程通知。
但DeviceB
仍然显示同步已启用。
有没有办法知道订阅何时被删除?
我知道CKFetchSubscriptionsOperation
。我可以定期致电CKFetchSubscriptionsOperation
了解订阅情况。有没有更好的方法呢?
【问题讨论】:
【参考方案1】:这是一个很好的问题,我也遇到过。你是对的。了解订阅状态的唯一方法是查询CKFetchSubscriptionsOperation
的可用内容。
一种可能的解决方法是创建一个名为 Subscription
之类的 recordType
并将用户当前使用的 subscriptionID
s 保存为 常规 CloudKit 记录(只需使用 String
属性在CKRecord
)。
然后,当他们在设备上取消订阅时,您可以更新 Subscription
记录,他们的所有设备都会收到更改通知。然后,该应用将根据用户可用的subscriptionID
s 更新实际订阅。
所以这是一个潜在的工作流程:
DeviceA
退订 subscription1
。
DeviceA
从Subscription
表中删除subscriptionRecord1
。
DeviceA
使用CKModifySubscriptionsOperation()
删除实际的subscription1
订阅。
DeviceB
收到通知,subscriptionRecord1
已被删除,并将同步 UISwitch
关闭(我假设您正在使用数据库或 UserDefaults
等本地持久性方法保存这些开关的状态)。
希望这会有所帮助。如果您有任何问题,请告诉我。
【讨论】:
以上是关于如何找出 CloudKit 订阅何时被删除?的主要内容,如果未能解决你的问题,请参考以下文章