Я пытался использовать NSCompoundPredicate(orPredicateWithSubpredicates:)
с CloudKit
NSPredicate
, но затем я прочитал в документации Apple, что предикаты сравнения OR
не поддерживаются в CloudKit
, поэтому я столкнулся с этим препятствием.
У меня есть массив из CKReferences
, который мне нужен, чтобы увидеть, содержит ли Record-type
из Reference list
эти ссылки.
Я изо всех сил пытаюсь собрать сам предикат, потому что пытаюсь избежать вложенных запросов в completionBlock
.
скажем, у меня есть следующий массив ссылок:
let refs = [CKReference]() // in my case the array isn't empty
Я пробовал следующее, но это не сработало, потому что почему-то он ищет только первый объект массива, а не весь массив.
let predicate = NSPredicate(format: "tableName CONTAINS %@", argumentArray: refs)
Здесь, если я напечатаю predicate
, он напечатает:
имя_таблицы СОДЕРЖИТ CKReference: 0x600000229c40; 20B54862-46CC-405F-BAE8-0DC8D3A52F78:(_defaultZone:владелец по умолчанию)>
Как видите, он ищет только первый объект в массиве.
Это может сработать, если я использую оператор ANY
в предикате, например:
let predicate = NSPredicate(format: "ANY { '%@', '%@' } = tableName", args: refs[0], refs[1])
Но моя проблема здесь в том, как я могу построить этот предикат, поскольку массив refs
является динамическим, и я не знаю, сколько объектов он может содержать, и поэтому я не знаю, как построить predicate args
доступ к [0], [1], ...
из refs
множество.
У вас есть обходной путь? Или лучший способ подойти к этому вопросу?
Спасибо.
ИЗМЕНИТЬ
Я нахожу способ решить эту проблему, но я не знаю, является ли он наиболее эффективным, поэтому я по-прежнему открыт для ответов и мнений.
Вот мое временное решение:
for (i, reference) in refs.enumerated() {
let predicate = NSPredicate(format: "tableName CONTAINS %@", reference)
// CKQuery
// CKQueryOperation
// Database.add(CKQueryOperation)
if i == refs.count - 1 {
// UPDATE UI
}
}
tableName
представляет собой список CKReference, и вы хотите создать предикат, используя другой список CKReference, чтобы увидеть, есть ли непустое пересечение двух массивов. Это правильно? - person rmaddy   schedule 17.09.2017