gpt4 book ai didi

swift - CKQuery 与 CloudKit 问题

转载 作者:行者123 更新时间:2023-11-30 10:11:46 26 4
gpt4 key购买 nike

我对 CloudKit 非常陌生,只是尝试运行最基本的查询。我想从 RecordType“Users”和字段类型“Name”中提取数据,并让名称等于我的 nameText 标签!

请参阅下面的代码:

 func getUserInformation() {
let Pred = NSPredicate(value: true)
let Query = CKQuery(recordType: "Namer", predicate: Pred)
let AgeOp = CKQueryOperation(query: Query)
AgeOp.database = self.Pub
AgeOp.recordFetchedBlock = {(record : CKRecord!) in
let Recorded : CKRecord = record!
self.nameText.text = Recorded.objectForKey("Name") as? String
}
}


override func viewDidLoad() {
super.viewDidLoad()

self.Container = CKContainer.defaultContainer() as CKContainer
self.Pub = Container.publicCloudDatabase as CKDatabase
self.Container.accountStatusWithCompletionHandler {
accountStatus, error in
if error != nil {

print("Error: \(error?.localizedDescription)")
} else {
self.getUserInformation()
}
}

}

最佳答案

Users是一个系统表。您可以向其中添加新字段,但建议不要这样做。主要原因之一是无法查询Users recordType。

此外,我在您的代码中看到您查询的是 recordType Namer 而不是 Users。是你的问题错了还是你的代码错了?

recordFetchedBlock中,您直接将结果放入.text中。该 block 将在后台线程中执行。您应该首先进入 mainQueue。你可以这样做:

AgeOp.recordFetchedBlock = {(record : CKRecord!) in
NSOperationQueue.mainQueue().addOperationWithBlock {
let Recorded : CKRecord = record!
self.nameText.text = Recorded.objectForKey("Name") as? String
}
}

当没有查询匹配时,.recordFetchedBlock 将永远不会被调用。您还应该设置 .queryCompletionBlock

查询可以返回多条记录(如果有更多同名的人)。在 recordFetchedBlock 中,您应该将记录添加到数组中。然后在 .queryCompletionBlock 中,您可以使用该数组。

关于swift - CKQuery 与 CloudKit 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574560/

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