2016-02-02 8 views
6

Я работаю над облачной синхронизацией в моем приложении (модель «Маленькие данные, все устройства», с пользовательской зоной в частной базе данных).Что такое clientChangeTokenData в CKModifyRecordsOperation?

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

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

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

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

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

спасибо.

ответ

3

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

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

+0

'clientChangeTokenData', кажется, равен нулю из блоков завершения CKModifyRecordsOperation. Это что-то, что мы (разработчики) должны сгенерировать и передать в операцию, прежде чем добавлять ее в очередь операций? Не ясно. –

+0

Вы должны проверить ключ с именем recordChangeTag. Он автоматически генерируется CloudKit. –

+0

. Вы сами устанавливаете clientChangeTokenData в операции изменения. Затем вы подтверждаете его соответствие по завершении синхронизации, то есть CKFetchRecordZoneChangesOperation. Почему вы хотели бы это сделать ... Я еще не уверен. – malhal

1

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

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

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

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

Смежные вопросы