如何找出 CloudKit 订阅何时被删除?

How to find out when a CloudKit Subscription is deleted?

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

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

此同步机制可以由用户enabled/disabled。

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

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

应用程序显示 UISwitch 供用户 enable/disable 同步。

让我们假设用户有 2 台设备 DeviceADeviceB,这表明已通过将 UISwitch.isOn 设置为 true 来启用同步。

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

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

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

我知道 CKFetchSubscriptionsOperation。我可以定期致电 CKFetchSubscriptionsOperation 了解订阅情况。有更好的方法吗?

这是一个很好的问题,也是我运行要解决的问题。你是对的。了解订阅状态的唯一方法是查询 CKFetchSubscriptionsOperation.

可用的内容

一个可能的解决方法是创建一个名为 SubscriptionrecordType 并将用户当前使用的 subscriptionID 保存为 常规 CloudKit 记录(只需在CKRecord 上使用String 属性)。

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

所以这是一个潜在的工作流程:

  1. DeviceA 取消订阅 subscription1
  2. DeviceASubscription table.
  3. 中删除 subscriptionRecord1
  4. DeviceA 使用 CKModifySubscriptionsOperation().
  5. 删除实际的 subscription1 订阅
  6. DeviceB 收到通知 subscriptionRecord1 已删除并将同步 UISwitch 关闭(我假设您正在使用本地持久性方法(如数据库)保存这些开关的状态或 UserDefaults).

希望对您有所帮助。如果您有任何问题,请告诉我。