我在我的 iOS 应用程序中使用 CloudKit。
在我的应用程序中,每当用户修改某些数据时,我都会更新 CloudKit 私有数据库,以便用户的其他设备也可以更新。
用户可以启用/禁用此同步机制。
当用户启用同步时,我创建一个订阅并将本地数据推送到 CloudKit。
如果用户已登录到其他设备,他们将开始按预期获取有关私有数据库更改的远程通知。
该应用程序显示了一个UISwitch
供用户启用/禁用同步。
假设用户有 2 台设备DeviceA
and DeviceB
这表明同步已通过设置启用UISwitch.isOn
为真。
如果用户禁用同步DeviceA
,然后删除订阅并进行更改DeviceA
不触发远程通知DeviceB
正如预期的那样。
But DeviceB
仍然显示同步已启用。
有没有办法知道订阅何时被删除?
我知道关于CKFetchSubscriptionsOperation https://developer.apple.com/documentation/cloudkit/ckfetchsubscriptionsoperation。我可以致电CKFetchSubscriptionsOperation
定期了解订阅情况。有更好的方法吗?
这是一个great问题,也是我遇到的问题。你是对的。了解订阅状态的唯一方法是查询可用的内容CKFetchSubscriptionsOperation
.
一种可能的解决方法是创建一个recordType
叫做类似的东西Subscription
并保存subscriptionID
s 用户当前正在使用 as常规CloudKit记录(只需使用一个String
财产在CKRecord
).
然后,当他们在设备上取消订阅时,您可以更新Subscription
记录,他们的所有设备都会收到更改通知。然后应用程序会更新actual订阅基于subscriptionID
是用户可用的。
所以这是一个潜在的工作流程:
-
DeviceA
取消订阅subscription1
.
-
DeviceA
删除subscriptionRecord1
来自Subscription
table.
-
DeviceA
删除实际的subscription1
订阅使用CKModifySubscriptionsOperation()
.
-
DeviceB
收到通知subscriptionRecord1
被删除并翻转同步UISwitch
关闭(我假设您正在使用本地持久性方法(例如数据库或UserDefaults
).
希望这有帮助。如果您有任何疑问,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)