2015-08-05 1 views
0

Я пытаюсь реализовать Cloudkit-синхронизацию с локальным кешем (CoreData).Cloudkit CKRecordZoneNotification, как узнать, произошло ли добавление или изменение

До сих пор мне удалось определить размер записи и получить соответствующие уведомления. На следующем шаге я проверю с CKFetchRecordChangesOperation что произошло.

  • recordChangedBlock (то есть в соответствии с Apple: ... для каждой записи в зоне, которая изменилась по сравнению с предыдущим выборки запроса ....) я получить соответствующую запись, но как Я знаю, была ли эта запись добавлена ​​или изменена (без проверки моего локального кеша)?

  • записьWithIDWasDeletedBlock Я получаю recordId, но как узнать, какая запись находится в моем локальном кеше? Я мог думать о хранении RecordId в локальном кэше, чтобы иметь ссылку для таких случаев, но я не могу поверить, что это то, что я должен сделать ...

Любое предложение более чем оценивается

ответ

0

Информация о recordChangedBlock не указана, если она была добавлена ​​или изменена. Имейте в виду, даже если это произошло, вам все равно нужно проверить, существует ли запись в локальном хранилище. Запись может быть добавлена ​​в CloudKit, а затем несколько раз изменена, пока ваше приложение не запущено. Когда ваше приложение наконец запустится, оно получит только последнее уведомление об изменении. Но запись еще не существует в вашем локальном кеше. Поэтому вы всегда должны видеть, есть ли у вас запись локально или нет, и соответственно добавить/обновить.

С удалением все, что вы получаете, это идентификатор записи CloudKit. Ничего больше. Что я делаю, так это то, что идентификатор записи CloudKit основан на локальном ключе. Таким образом я могу легко найти и удалить локальную запись, когда данные будут удалены из Cloudkit. Это также означает, что локальная копия данных CloudKit на всех устройствах пользователя заканчивается теми же ключами.

+0

Thx много, звучит логично, но не совсем то, что я надеялся узнать. Поэтому мне нужно написать логику самостоятельно, где я надеялся получить ее от Apple. – Red