Как узнать, когда подписка CloudKit удалена? - PullRequest
2 голосов
/ 18 апреля 2019

Я использую CloudKit в своем приложении для iOS.

В моем приложении всякий раз, когда пользователь изменяет некоторые данные, я обновляю частную базу данных CloudKit, чтобы другие устройства пользователя также могли получать обновления.

Этот механизм синхронизации может быть включен / отключен пользователем.

Когда пользователь включает синхронизацию, я создаю подписку и отправляю локальные данные в CloudKit.

Если пользователь вошел в систему на других устройствах, он начинает получать удаленные уведомления об изменениях в частной базе данных, как и ожидалось.

Приложение показывает UISwitch для пользователя, чтобы включить / отключить синхронизацию.

Предположим, что у пользователя есть 2 устройства DeviceA и DeviceB, которые показывают, что синхронизация включена, установив для UISwitch.isOn значение true.

Если пользователь отключает синхронизацию на DeviceA, подписка удаляется, а изменения, сделанные на DeviceA, не вызывают удаленных уведомлений на DeviceB, как ожидалось.

Но DeviceB по-прежнему показывает, что синхронизация включена.

Есть ли способ узнать, когда была удалена подписка?

Я знаю о CKFetchSubscriptionsOperation. Я могу периодически звонить по номеру CKFetchSubscriptionsOperation, чтобы узнать о подписках. Есть ли лучший способ для этого?.

1 Ответ

0 голосов
/ 19 апреля 2019

Это большой вопрос, и я тоже столкнулся с ним.Ты прав.Единственный способ узнать состояние подписки - запросить информацию о том, что доступно с помощью CKFetchSubscriptionsOperation.

. Один из возможных обходных путей - создать recordType, называемый чем-то вроде Subscription, и сохранить subscriptionID s.пользователь в настоящее время использует как обычные записи CloudKit (просто используйте свойство String на CKRecord).

Затем, когда они отписываются на устройстве, вы можете обновить Subscription запись и все их устройства будут уведомлены об изменении.Затем приложение обновит фактические подписки на основе subscriptionID s, доступных пользователю.

Итак, вот потенциальный рабочий процесс:

  1. DeviceAотписывается от subscription1.
  2. DeviceA удаляет subscriptionRecord1 из таблицы Subscription.
  3. DeviceA удаляет действительную подписку subscription1, используя CKModifySubscriptionsOperation().
  4. DeviceB получает уведомление о том, что subscriptionRecord1 был удален, и отключает синхронизацию UISwitch (я предполагаю, что вы сохраняете состояние этих коммутаторов с помощью локального метода сохранения, например, базы данных или UserDefaults).

Надеюсь, это поможет.Дайте мне знать, если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...