Мой вопрос связан с дельта-загрузкой, так как он был назван в WWDC 2014 Advanced CloudKit.CloudKit: CKFetchRecordChangesOperation, CKServerChangeToken и Delta Загрузить
Я пытаюсь сделать syncronization для моего приложения Core Data, которое является iPhone только сейчас (подумайте: есть только одно устройство активно). Таким образом, в основном приложение будет хранить пользовательские записи в облаке с одного и того же устройства, в большинстве случаев на данный момент.
У меня проблема с пониманием особенностей пользовательской зоны, которая основана на CKFetchRecordChangesOperation
aka Delta Download.
Как я понял, у нас есть CKServerChangeToken
для поддержания операций синхронизации (я имею в виду загружать только те записи, которые были добавлены/изменены/удалены другим устройством), как было представлено на WWDC. Но я не понимаю, что мы получаем этот токен только после CKFetchRecordChangesOperation
, когда мы сохраняем записи в облаке, мы не получаем новый токен.
И если мы делаем выборку с текущим доступным токеном (поскольку он изменяется только после извлечения), мы получаем записи, которые были сохранены из нашей предыдущей операции сохранения. В основном мы получаем исправления, которые уже есть на нашем устройстве. Зачем? Я что-то упустил?
Что делать, если мы высеваем некоторые данные в облако (с устройства A), это оправдано для ситуации, когда устройство B извлекает записи зоны, но что делать, если устройство A? Скачайте все записи еще раз?
Я нашел recordChangeTag
в CKRecord
, это свойство можно использовать для разрешения конфликтов с местными объектами - неправдоподобные объектов (одинаковые или разные версии), если это кто-то может дать мне пример того, как мне нужно это сделать: сохранить recordChangeTag для Core Data, если сохранить запись в CloudKit в первый раз или как?
Отсутствие документации - такая головная боль.
Я действительно открыл футляр с Apple об этой проблеме. Нет никакого смысла, что устройство сообщается об изменениях, которые были сделаны с устройства, используя 'CKFetchRecordChangesOperation'. Мне сказали ровно - так оно и есть. Таким образом, ваш код должен иметь дело с получением всех этих избыточных изменений записей. – rmaddy
@rmaddy О, спасибо за эту информацию. Если вы напишете это как ответ, я соглашусь с ним, потому что нет других ответов, а ваш ближайший. –
@rmaddy Я прочитал вашу дискуссию о яблочном devforum Рике, и я хочу спросить вас, вы попробовали обходное решение, предложенное PBK? Ссылка на обсуждение: https://forums.developer.apple.com/message/77233#77233 –