Подписка CloudKit с несколькими сравнениями

Я пытаюсь создать подписку на уведомления CloudKit, но не могу правильно указать предикат. Появляются простые уведомления только с одним предикатом сравнения, поэтому полезная нагрузка настроена правильно, но если я сделаю предикат немного более сложным, он не получит никаких уведомлений. Мне нужно подписаться на несколько изменений записей, но я должен делать это по одному. Я хочу иметь только одну подписку, используя IN или OR, но, похоже, это не работает.

рабочий предикат

let predicate = NSPredicate(format: "recordID == %@", recordID1)

нерабочие предикаты

let recordIDs = [recordID1, recordID2, recordID3, recordID4]
let predicate1 = NSPredicate(format: "recordID IN %@", recordIDs)
let predicate2 = NSPredicate(format: "NOT recordID IN %@", recordIDs)

var predicate3 = NSPredicate(format: "recordID != %@", recordID1)
for id in recordIDs.filter {$0 != recordID1} {
    predicate3 = NSCompoundPredicate(andPredicateWith: [predicate, NSPredicate(format: "recordID != %@", id)])
}

Я использую для справки руководство по CKQuery CloudKit (https://developer.apple.com/reference/cloudkit/ckquery). Отличается ли реализация предикатов подписки или я просто создаю неправильные предикаты? Кстати, все предикаты компилируются, на точках останова отображаются корректно, ошибок в коде нет, приложение нигде не падает, я проверил, что подписки действительно на сервере и с предикатами я уточнил. Не имеет значения, изменена ли запись на устройстве или на сервере, более сложные предикаты никогда не совпадают.

Для завершения вот остальная часть кода подписки, которая отлично работает с первым предикатом, но не с остальными:

let subscription = CKSubscription(recordType: "Avatar", predicate: predicate, options: CKSubscriptionOptions.FiresOnRecordUpdate)
let notificationInfo = CKNotificationInfo()
notificationInfo.shouldSendContentAvailable = true
subscription.notificationInfo = notificationInfo

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


person Alejandro    schedule 24.10.2016    source источник
comment
Возможный дубликат Как запросить CloudKit для получения идентификатора записи IN [CKRecordID]   -  person rmaddy    schedule 25.10.2016
comment
Также обратите внимание (как описано в CKQuery), предикаты CloudKit не поддерживают OR.   -  person rmaddy    schedule 25.10.2016
comment
Да, прости. Я обновил вопрос, удалив OR. Все еще не работает. В другом вопросе упоминается использование CKReference вместо CKRecordID, но я попробовал это, и результат тот же; никаких уведомлений.   -  person Alejandro    schedule 25.10.2016