2015-10-02 10 views
8

Мой предикат хочет исключить некоторые записи, которые уже загружены и доступны в [CKRecordID]. Теперь я могу запросить 1 CKRecordID [0], но не массив [CKRecordID]. Как я могу запросить массив?Как запросить CloudKit для recordID IN [CKRecordID]

let excludeIDs: [CKRecordID] 

Это работает:

let pred1 = NSPredicate(format: "NOT(recordID = %@)", excludeIDs[0]) 

Но это не делает:

let pred1 = NSPredicate(format: "NOT(recordID IN %@)", excludeIDs) 

ОШИБКА: loadImageCompareRecordIDsAndEndDateThatHaveNotEnded Ошибка: недопустимый предикат: инвалидные предикат: члены массива должны соответствовать CKRecordValue: ( "", "", "", "" , "" ) (CKRecordID)

Другие общие части кода:

let sort = NSSortDescriptor(key: "creationDate", ascending: false) 
    let query = CKQuery(recordType: MyRecordTypes.ImageCompare, predicate: pred1) 
    query.sortDescriptors = [sort] 
    let operation = CKQueryOperation(query: query) 
    operation.desiredKeys = ["endDate"] 
    operation.resultsLimit = 50 

ответ

8

Используя [CKReference], а не [CKRecordID] решил.

+1

Спасибо, странный CKRecordID работает для одиночных сравнений – malhal

+0

Можете ли вы предоставить образец кода? –

+1

@SamBallantyne Просто конвертируйте свои идентификаторы записей в CKReferences, например let refs = myRecords.map ({CKReference (recordID: $ 0.record.recordID, действие: .None)}) – DogCoffee