recordID 的值类型为引用,无法查询

Gru*_*mpy 3 ios swift cloudkit

错误是:字段“__recordID”的值类型为引用,无法使用过滤器值类型字符串进行查询。

代码:

func getImage() {
let predicate = NSPredicate(format: "recordID = %@", myRecordID)
let query = CKQuery(recordType: "Images", predicate: predicate)
publicDB.performQuery(query, inZoneWithID: nil , completionHandler: ({ results, error in
    if(error != nil) {
            print("Error")
    }
    else {
    if results!.count > 0 {
        for record in results! {
            print("I have results from query")
        }
        else {
            print("query returned with no results")
        }
    }
}))
Run Code Online (Sandbox Code Playgroud)

myRecordID 是: 3F1CF4EC-95F4-4659-AA47-B00048B3BBAE 这是有效的

Edw*_*eer 5

就像错误告诉您一样:您必须使用引用而不是字符串进行查询。

所以你的代码必须是:

let referenceField = "recordID"
let refId = CKRecordID(recordName: myRecordID)
let ref = CKReference(recordID: refId, action: CKReferenceAction.None)
let query = CKQuery(recordType: recordType, predicate: NSPredicate(format: "%K == %@", referenceField ,ref))
Run Code Online (Sandbox Code Playgroud)

但话又说回来。使用以下内容更容易获得记录:

publicDB.fetchRecordWithID(CKRecordID(recordName: recordId), completionHandler: {record, error in
Run Code Online (Sandbox Code Playgroud)