gpt4 book ai didi

ios - 从 CloudKit 中的记录中仅检索一个值

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:46 25 4
gpt4 key购买 nike

我正在学习使用 CloudKit,并最终设法检索/查询硬编码到仪表板中的数据。我尝试使用 CKQueryOperation 从记录中查询一个值,但我总是收到每条记录中的所有值。在我下面的代码中,我试图通过使用 desiredKey 属性来获取“age”值——我得到的是“age”、“firstName”、“lastName”等。

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)

最佳答案

问题很简单。您在 CKQueryOperation 上设置了 desiredKeys,但实际上从未使用过该操作。您改为在数据库上使用 performQuery

如果要使用操作并将数据限制为特定键,则需要将操作添加到数据库(使用addOperation:)而不是调用performQuery .当然,您需要为操作的一个或多个 recordFetchedBlockqueryCompletionBlock 属性分配一个 block 。

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"]

operation.recordFetchBlock = { (record : CKRecord) in
// process record
}
operation.queryCompletionBlock = { (cursor : CKQueryCursor!, error : NSError!) in
// Query finished
}

// addOperation
publicData.addOperation(operation)

关于ios - 从 CloudKit 中的记录中仅检索一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35176467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com