Что такое clientChangeTokenData в CKModifyRecordsOperation?
Я работаю над синхронизацией CloudKit в моем приложении (модель "Крошечные данные, все устройства", с настраиваемой зоной в частной базе данных).
CKModifyRecordsOperation
содержит clientChangeTokenData
собственностью NSData
тип, который описан в документации следующим образом:
Когда вы изменяете записи из операции выборки, укажите сгенерированный клиентом токен данных, используя это свойство, чтобы указать, какую версию записи вы в последний раз изменили. Сравните полученный токен данных с токеном данных при следующей выборке записи, чтобы убедиться, что сервер успешно получил последний запрос на изменение устройства.
Я не понимаю, почему я должен беспокоиться, учитывая, что с каждым запросом я получаю блок завершения, который сообщает мне, успешно ли сервер получил мой запрос. Почему мне нужно вручную сравнивать этот клиентский токен?
Указывает clientChangeTokenData
требуется правильно обрабатывать мой вариант использования? Я отслеживаю локальные изменения данных и помещаю все в очередь при каждом изменении данных. Удаленные изменения отслеживаются через подписку зоны.
Если это необходимо, как мне правильно сгенерировать этот токен, учитывая, что у меня есть все виды изменений записей в моем CKModifyRecordsOperation
(мое использование API предназначено для пакетных операций). Каков общий рабочий процесс здесь?
Спасибо.
2 ответа
Непонятно, но я думаю, clientChangeTokenData
полезно в случае отправки огромной операции изменения записей, например, удаления 100 записей, которая занимает много времени. Затем, скажем, ваше приложение отправляет запрос на выборку в другой операции с набором результатов запроса (или выборки изменений), на который будут влиять модификации, которые либо:
- запускается и работает одновременно с существующей операцией модификации, которая еще не завершена.
- запускается до того, как сервер завершил обработку результатов предыдущих модификаций (документы имеют тенденцию ссылаться на задержку обработки).
Если завершение выборки содержит другой clientChangeTokenData
на тот, который был отправлен с модификацией, тогда вы знаете, что он еще не получил (или завершил обработку?) изменения. В этой ситуации вы можете либо выдать ошибку с предупреждением о том, что серверу нужно больше времени, либо автоматически повторить выборку через некоторое время.
Кстати, в моих тестах этот токен для каждого устройства.
У вас была бы причина проверить токен только в том случае, если у вас были локальные изменения, которые вы хотите записать в CloudKit, и вы хотите убедиться, что ваши изменения основаны на последней версии данных в CloudKit.
Вы также можете просто проигнорировать токен и сохранить данные в любом случае. Если данные за это время изменились, вы получите ошибку CloudKit, и тогда вы сможете ее обработать.