Предшествующий ServerChangeToken для CKFetchNotificationChangesOperation специфичен для пользователя или базы данных?
Для общедоступных баз данных CloudKit кто-нибудь знает, являются ли токены данных, используемые для previousServerChangeToken при инициализации CKFetchNotificationChangesOperation:
1) Специфично для пользователя: токен данных может использоваться только одним Apple ID
или же
2) Специфично для базы данных: один и тот же токен может использоваться разными Apple ID для указания одного и того же состояния в базе данных CKNotifications
Мне интересно, потому что у меня есть некоторые предварительно загруженные локальные данные, которые, возможно, потребуется обновить при первом запуске, и я не уверен, стоит ли мне использовать CKFetchNotificationChangesOperation (с исходным токеном, сохраненным в основном комплекте) или просто получить все записи в общедоступная база данных и проверка по местным данным.
2 ответа
Жетоны изменения уведомлений являются индивидуальными для каждого пользователя, и их нельзя использовать для предположения о состоянии записей в общедоступной базе данных.
Похоже, вы пытаетесь использовать общедоступную базу данных для хранения файлов, которые обновляют файлы по умолчанию в комплекте вашего приложения.
Одним из способов сделать это было бы сохранить version
собственность на все ваши записи этого типа. Когда приложение проверяет, нужны ли ему какие-либо обновления, оно может запустить CKQuery
для всех записей с более высокой версией, чем та, которая сохраняется локально. Ваше приложение может затем загрузить все эти записи и использовать их вместо данных, хранящихся в его комплекте.
Что вам нужно, так это CKFetchRecordChangesOperation, но это работает только для зон не по умолчанию в пользовательской частной базе данных cloudkit. Эта операция предоставит вам все изменения в зоне записи, удаленные записи и обновления (только с измененными атрибутами).