Что такое clientChangeTokenData в CKModifyRecordsOperation?

Я работаю над синхронизацией CloudKit в моем приложении (модель "Крошечные данные, все устройства", с настраиваемой зоной в частной базе данных).

CKModifyRecordsOperation содержит clientChangeTokenData собственностью NSData тип, который описан в документации следующим образом:

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

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

Указывает clientChangeTokenData требуется правильно обрабатывать мой вариант использования? Я отслеживаю локальные изменения данных и помещаю все в очередь при каждом изменении данных. Удаленные изменения отслеживаются через подписку зоны.

Если это необходимо, как мне правильно сгенерировать этот токен, учитывая, что у меня есть все виды изменений записей в моем CKModifyRecordsOperation (мое использование API предназначено для пакетных операций). Каков общий рабочий процесс здесь?

Спасибо.

2 ответа

Непонятно, но я думаю, clientChangeTokenData полезно в случае отправки огромной операции изменения записей, например, удаления 100 записей, которая занимает много времени. Затем, скажем, ваше приложение отправляет запрос на выборку в другой операции с набором результатов запроса (или выборки изменений), на который будут влиять модификации, которые либо:

  1. запускается и работает одновременно с существующей операцией модификации, которая еще не завершена.
  2. запускается до того, как сервер завершил обработку результатов предыдущих модификаций (документы имеют тенденцию ссылаться на задержку обработки).

Если завершение выборки содержит другой clientChangeTokenData на тот, который был отправлен с модификацией, тогда вы знаете, что он еще не получил (или завершил обработку?) изменения. В этой ситуации вы можете либо выдать ошибку с предупреждением о том, что серверу нужно больше времени, либо автоматически повторить выборку через некоторое время.

Кстати, в моих тестах этот токен для каждого устройства.

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

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

Другие вопросы по тегам