Интересно, как на это нет ответов.Я только что реализовал некоторый код, связанный с CKShare, и он, кажется, работает довольно предсказуемо.Вот базовый подход.
1) при запуске моего приложения я делаю CKFetchRecordZonesOperation.fetchAllRecordZonesOperation()
в общей базе данных, чтобы получить все текущие зоны записи, которые мне доступны.
2) Я настроил CKDatabaseSubscription
в общей базе данных, как вы предлагаете.
3) Получив это уведомление в общей базе данных, я делаю пакет CKFetchRecordZoneChangesOperation
во всех зонах общих записей.(Вы можете передать несколько зон записи вместе с токеном изменения сервера для каждой зоны, чтобы выполнить запрос массовых обновлений.)
4) Если какие-либо общие ресурсы не были разделены, но сами зоны записи по-прежнему действительны, яобратите внимание, что recordWithIDWasDeletedBlock
запускается дважды, один раз с неразделенным CKRecord
и один раз с соответствующим CKShare
.
5) (я еще не полностью выяснил эту часть), если доля былапоследний для данного пользователя, вся общая зона записи этого пользователя удаляется из моей общей базы данных.Я еще не совсем понял, как лучше всего справиться с этой частью.Я мог бы запрашивать новые зоны записи каждый раз, когда получаю CKDatabaseNotification
, но это кажется расточительным.Я вижу, что могу запустить операцию CKFetchDatabaseChanges
, которая информирует меня об измененных зонах, но мне еще предстоит выяснить, когда лучше всего ее запускать.