Выборка нескольких записей по имени записи
У меня есть массив имен записей (или строк) . Я хочу получить любую запись в общедоступной базе данных, которая имеет любое из этих имен записей. Как я могу это сделать?
1 ответ
Решение
Вы должны применить что-то вроде этого...
let filter: [String] = [ "String1", "String2", "String3" ]
let predicate: NSPredicate = NSPredicate(format: "%k IN %@", "record_name", filter)
let query: CKQuery = CKQuery(recordType: "RecordType", predicate: predicate)
CKContainer.default.publicCloudDatabase.perform(query, inZoneWith: nil, completionHandler: { @escaping ([CKRecord]?, Error?) -> Void in
// Do what you want with your filtered CKRecords ;)
})
NSPredicate
использует агрегированный оператор IN
для того, чтобы фильтровать по содержимому массива. Больше информации в Predicate Programming Guide
Проверять, выписываться CKFetchRecordsOperation(recordIDs: [CKRecord.ID])
вы не включили пример кода, но если у вас есть идентификаторы записи в виде массива строк, тогда:
let ids: [String] = [...] // your array of the record names as Strings
let recordIDs = ids.map { CKRecord.ID(recordName: $0) }
let operation = CKFetchRecordsOperation(recordIDs: recordIDs)
operation.fetchRecordsCompletionBlock = { (ckRecords, error) in
... // do stuff with your records
}
CKContainer.default().publicCloudDatabase.add(operation)