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