Я создаю приложение для iOS, которое в значительной степени зависит от CloudKit в качестве источника данных.
После установки приложения и его первого запуска мне нужно загрузить большое количество данных, которые находятся в общедоступной базе данных моего контейнера CloudKit. Я делаю это с CKFetchNotificationChangesOperation
Эта операция выполняется каждый раз, когда я запускаю приложение для проверки изменений данных с момента получения последнего токена изменения сервера. Очевидно, что при первом запуске приложения токен изменения, который я должен предоставить, равен нулю, что приведет к тому, что CKFetchNotificationChangesOperation
загрузит ВСЕ изменения, когда-либо произошедшие в базе данных.
Данные, которые затем возвращаются, будут храниться локально, так как я хочу иметь локальный кеш со всеми данными, относящимися к моему пользователю. Я храню эти данные в базе данных Core Data. Поскольку набор данных, необходимый приложению при первом запуске, может быть большим, мне действительно нужно CKFetchNotificationChangesOperation для получения ВСЕХ изменений на сервере.\
Однако это кажется ненадежным. При тестировании этой службы с некоторыми данными, которые я ввел в свою базу данных, я не получил все данные, которые должен был получить. По мере того, как я ввожу больше данных в свою общедоступную базу данных, CKFetchNotificationChangesOperation
, кажется, полностью игнорирует записи, которые я ввел ранее. Иногда некоторые проскальзывают, но это очень ненадежно.
Очевидно, я проверил, что мои подписки являются законными (те же записи были загружены ранее), и я проверил, является ли параметр moreComing
CKFetchNotificationChangesOperation
истинным (всегда false
)
Вопрос
Что я должен сделать, чтобы получить ВСЕ данные в моей общедоступной базе данных при начальной загрузке? Я думал, что CKFetchNotificationChangesOperation
должен выполнять эту работу, но это кажется ненадежным. Есть ли что-то вроде «области», которую я могу настроить для этой операции, чтобы заставить ее загружать все мои данные? Или CKFetchNotificationChangesOperation
не подходит для начальных загрузок, и я должен просто загрузить все данные, которые мне нужны, с помощью пользовательских операций?