我在iOS应用程序中使用CloudKit。
在我的应用程序中,每当用户修改某些数据时,我都会更新CloudKit私有数据库,以便用户的其他设备也可以更新。
用户可以启用/禁用此同步机制。
当用户启用同步时,我创建订阅并将本地数据推送到CloudKit。
如果用户已登录到其他设备,则他们会按预期开始获取有关对专用数据库所做更改的远程通知。
该应用程序显示UISwitch
供用户启用/禁用同步。
让我们假设用户有2个设备DeviceA
和DeviceB
,它们显示已通过将UISwitch.isOn
设置为true来启用同步。
如果用户禁用DeviceA
上的同步,则会删除订阅,并且对DeviceA
所做的更改不会按预期触发对DeviceB
的远程通知。
但DeviceB
仍然表明同步已启用。
有没有办法知道订阅何时被删除?
我知道CKFetchSubscriptionsOperation
。我可以定期打电话给CKFetchSubscriptionsOperation
以了解订阅。有更好的方法吗?
这是一个很好的问题,也是我遇到的问题。你是对的。了解订阅状态的唯一方法是查询CKFetchSubscriptionsOperation
可用的内容。
一种可能的解决方法是创建一个名为recordType
的Subscription
并保存用户当前使用的subscriptionID
s作为常规CloudKit记录(只需在String
上使用CKRecord
属性)。
然后,当他们取消订阅设备时,您可以更新Subscription
记录,并且所有设备都会收到有关更改的通知。然后,应用程序将根据用户可用的subscriptionID
s更新实际订阅。
所以这是一个潜在的工作流程:
DeviceA
取消了subscription1
的订阅。DeviceA
使用subscriptionRecord1
删除了实际的Subscription
订阅。DeviceA
得到通知,subscription1
被删除并将同步CKModifySubscriptionsOperation()
翻转为关闭(我假设您使用本地持久性方法(如数据库或DeviceB
)保存这些开关的状态)。希望这会有所帮助。如果您有任何疑问,请告诉我。