Как обновить все записи клиентов из CloudKit?

Мое приложение хранит локально все записи, которые хранит CloudKit. Таким образом, это не концепция маленького телефона с большими данными, а концепция всех серверов данных и концепции клиентов всех данных. Мне нужны все обновления время от времени, когда приложение снова запускается.

Должен ли я установить для всех существующих записей тип CKSubscription?

  • С сервера может приходить много уведомлений, хотя я предполагаю, что есть «тихий режим», должно быть ограничение на емкость хранилища для сбора уведомлений iCloud.

Должен ли я удалить все локальные записи при запуске приложения и снова загрузить его с CloudKit, чтобы получить обновления?

  • Каждый раз нужно обновлять слишком много данных.

person János    schedule 30.12.2014    source источник


Ответы (1)


CloudKit имеет CKFetchRecordChangesOperation для этого. Вы можете запросить все изменения в зоне с момента предыдущего обновления. Затем вы можете синхронизировать эти данные с хранилищем внутри вашего приложения.

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

person Edwin Vermeer    schedule 30.12.2014
comment
поэтому вы рекомендуете для часто меняющихся типов записей использовать только CKFetchRecordChangesOperation без удаленного уведомления? - person János; 30.12.2014
comment
да, ckFetchRecordChangesOperation будет работать без CKSubscription. Вы даже получите все данные из всех измененных типов записей. Выбор этого над подписками является функциональным решением. Вы можете использовать оба варианта, если у вас есть тип записи с важными данными, которые должны быть актуальными. Затем помните, что вы также получите те же изменения с CKFetchRecordChangesOperation. - person Edwin Vermeer; 30.12.2014
comment
Вы также должны знать, что CKFetchRecordChangesOperation предоставит вам все данные в пределах зоны. Так что если клиенту не нужны все данные, то это, наверное, вам не подходит. - person Edwin Vermeer; 30.12.2014
comment
CKFetchRecordChangesOperation устарело с iOS 10 :( - person lewis; 08.04.2020