Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何确定何时删除CloudKit订阅?_Ios_Apple Push Notifications_Cloudkit - Fatal编程技术网

Ios 如何确定何时删除CloudKit订阅?

Ios 如何确定何时删除CloudKit订阅?,ios,apple-push-notifications,cloudkit,Ios,Apple Push Notifications,Cloudkit,我正在iOS应用程序中使用CloudKit 在我的应用程序中,每当用户修改某些数据时,我都会更新CloudKit私有数据库,以便用户的其他设备也可以得到更新 此同步机制可由用户启用/禁用 当用户启用同步时,我创建订阅并将本地数据推送到CloudKit 如果用户已登录到其他设备,他们将按照预期收到有关私有数据库更改的远程通知 应用程序显示一个ui开关,供用户启用/禁用同步 让我们假设用户有两个设备DeviceA和DeviceB,它们显示通过将UISwitch.isOn设置为true已启用同步 如果

我正在iOS应用程序中使用CloudKit

在我的应用程序中,每当用户修改某些数据时,我都会更新CloudKit私有数据库,以便用户的其他设备也可以得到更新

此同步机制可由用户启用/禁用

当用户启用同步时,我创建订阅并将本地数据推送到CloudKit

如果用户已登录到其他设备,他们将按照预期收到有关私有数据库更改的远程通知

应用程序显示一个
ui开关
,供用户启用/禁用同步

让我们假设用户有两个设备
DeviceA
DeviceB
,它们显示通过将
UISwitch.isOn
设置为true已启用同步

如果用户在
DeviceA
上禁用同步,则订阅将被删除,并且在
DeviceA
上所做的更改不会按预期触发对
DeviceB
的远程通知

但是
DeviceB
仍然显示同步已启用

有没有办法知道订阅何时被删除


我知道。我可以定期调用
ckfetchsubscriptions操作
,了解订阅情况。有更好的方法吗?

这是一个非常好的问题,也是我遇到的问题。你说得对。了解订阅状态的唯一方法是查询
CKFetchSubscriptionsOperation
提供的内容

一种可能的解决方法是创建一个名为
Subscription
recordType
,并将用户当前使用的
subscriptionID
保存为常规CloudKit记录(只需在
CKRecord
上使用
字符串
属性)

然后,当他们在设备上取消订阅时,您可以更新
订阅
记录,他们的所有设备都将收到更改通知。然后,应用程序将根据用户可用的订阅ID更新实际订阅

因此,这里有一个潜在的工作流程:

  • DeviceA
    取消订阅
    subscription1
  • DeviceA
    Subscription
    表中删除
    subscriptionRecord1
  • DeviceA
    使用
    CKModifySubscriptionsOperation()
    删除实际的
    subscription1
    订阅
  • DeviceB
    收到已删除
    subscriptionRecord1
    的通知,并将同步
    UISwitch
    翻转为关闭(我假定您正在使用本地持久性方法保存这些开关的状态,如数据库或
    UserDefault
  • 希望这能有所帮助。如果你有任何问题,请告诉我