1
我正在學習使用CloudKit,並最終設法檢索/查詢硬編碼到儀表板的數據。我試圖使用CKQueryOperation
從記錄中只查詢一個值,但我總是收到每個記錄中的所有值。 在我的代碼下面,我嘗試使用desiredKey
財產得到公正的「年齡」的價值觀 - 我得到的回覆是「年齡」,「名字」,「姓氏」等等等等從CloudKit中的記錄中檢索一個值
let container = CKContainer.defaultContainer()
let publicData = container.publicCloudDatabase
// select all records
let predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
let query = CKQuery(recordType: "quizRecord", predicate: predicate)
// get just one value only
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["age"]
// addOperation
publicData.addOperation(operation)
publicData.performQuery(query, inZoneWithID: nil) { results, error in
if error == nil { // There is no error
// PROBLEM .. this prints out all values ????
print(results)
dispatch_async(dispatch_get_main_queue(), {() -> Void in
})
}
else {
print(error)
}
}
////以下/修改代碼工作正常
let container = CKContainer.defaultContainer()
let publicData = container.publicCloudDatabase
// select all records
let predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
let query = CKQuery(recordType: "quizRecord", predicate: predicate)
// get just one value only
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["age"]
// get query
operation.recordFetchedBlock = { (record : CKRecord) in
// process record
print(record)
}
// operation completed
operation.queryCompletionBlock = {(cursor, error) in
dispatch_async(dispatch_get_main_queue()) {
if error == nil {
print("no errors")
// code here
} else {
print("error description = \(error?.description)")
}
}
}
// addOperation
publicData.addOperation(operation)
@maddy。謝謝你的幫助。所以我已經將操作添加到數據庫(上面的代碼編輯),但我不明白我是如何做到這一點,而不是調用performQuery? – pete
正如我所說的,您需要爲「recordFetchedBlock」和「queryCompletionBlock」屬性中的一個或兩個分配一個塊。它在這些塊中處理結果。並且不要同時使用'addOperation'和'performQuery'。只使用一個或另一個。 – rmaddy
@maddy。對不起,當你說使用一個或另一個時,我完全迷失了方向。您可以幫助使用desiredKeys執行查詢的代碼: – pete