Предшествующий ServerChangeToken для CKFetchNotificationChangesOperation специфичен для пользователя или базы данных?

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

1) Специфично для пользователя: токен данных может использоваться только одним Apple ID

или же

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

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

2 ответа

Решение

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

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

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

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

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