Как подключить CKQueryNotification к CKRecord или CKSubsription?

Мне нужен способ подключить CKQueryNotification к CKRecord или CKSubscription, чтобы я мог получать обновления / вставки / удаления для нескольких типов записей. Я успешно получаю CKNotifications, и это полезная нагрузка:

{
    ck =     {
        ce = 2;
        cid = "<my cloud container id>";
        nid = "<unknown guid>";
        qry =         {
            dbs = 2;
            fo = 1;
            rid = "<the record id>";
            sid = "<THIS IS THE SUBSCRIPTION ID>";
            zid = "_defaultZone";
            zoid = "_defaultOwner";
        };
    };
}

Я могу получить идентификатор подписки по полезной нагрузке уведомления и привязать идентификатор подписки к локальному кешу, который знает тип записи, но я хочу использовать CKFetchNotificationChangesOperation для извлечения непрочитанных уведомлений, и в этот момент у меня есть только объект CKQueryNotification,

Объект CKQueryNotification имеет только CKRecordID, и, насколько я могу судить, я не могу получить CKRecord из CKRecordID. Я мог бы выполнить запрос на все мои CKRecord->recordType в моем контейнере, но это не так.

Любая помощь приветствуется!

1 ответ

Решение

Если вы получили push-уведомление, то вы должны увидеть, можете ли вы привести его к CKQueryNotification. В самом деле, вы должны вызвать -[CKDatabase fetchRecordWithID: завершение Handler:] для получения полной записи. затем вы можете использовать.recordType, чтобы увидеть, что это за запись.

Проблема возникает только тогда, когда у вас несколько подписок на один и тот же recordType. Вы можете решить это, проверив, соответствует ли объект предикату, который вы использовали для этой подписки. См. Метод предиката.evaluateWithObject для этого. Вы не можете использовать это, если у вас есть предикат для CKReference.

Если вам нужен рабочий пример этого, то вы можете взглянуть на: https://github.com/evermeer/EVCloudKitDao который имеет некоторые другие полезные функции, такие как автоматический синтаксический анализ от и до CKRecord и кэширование на устройстве результатов.

Другие вопросы по тегам