2015-12-16 1 views
1

Для общественных баз данных CloudKit, кто-нибудь знает, если маркеры данных, используемые для previousServerChangeToken при инициализации CKFetchNotificationChangesOperation являются:Являются ли previousServerChangeToken для CKFetchNotificationChangesOperation специфичным для пользователя или конкретной базы данных?

1) Пользователь конкретны: маркер данных может быть использован только один идентификатор Apple

или

2) базы данных конкретно: тот же маркер может быть использован различными идентификаторами Apple, чтобы указать то же состояние в базе данных CKNotifications

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

ответ

1

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

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

Одним из способов сделать это было бы хранение имущества version на всех ваших записях этого типа. Когда приложение проверяет, нужны ли ему какие-либо обновления, он может запускать CKQuery для всех записей с более высокой версией, чем то, что сохраняется локально. Затем ваше приложение может загрузить все эти записи и использовать их вместо данных, хранящихся в его комплекте.

0

Что вам нужно, это CKFetchRecordChangesOperation, но это работает только для зон, отличных от по умолчанию, в частной базе данных облачного пользователя. Эта операция даст вам все изменения в зоне записи, записи удаляются и обновляются (только с измененными атрибутами).