CKQuery 有 CloudKit 个问题
CKQuery with CloudKit Issue
我是 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()
}
}
}
用户是一个系统table。您可以向其中添加新字段,但建议不要这样做。主要原因之一是您无法查询用户记录类型。
此外,我在您的代码中看到您查询的是 recordType Namer 而不是 Users。是你的问题错了还是你的代码错了?
在recordFetchedBlock
中你直接把结果放在.text
中。该块将在后台线程中执行。你应该先去mainQueue。你可以这样做:
AgeOp.recordFetchedBlock = {(record : CKRecord!) in
NSOperationQueue.mainQueue().addOperationWithBlock {
let Recorded : CKRecord = record!
self.nameText.text = Recorded.objectForKey("Name") as? String
}
}
当没有查询匹配时,将永远不会调用 .recordFetchedBlock
。您还应该设置 .queryCompletionBlock
查询可以return多条记录(如果有更多同名的人)。在 recordFetchedBlock
中,您应该将记录添加到数组中。然后在 .queryCompletionBlock
中你可以使用那个数组。
我是 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()
}
}
}
用户是一个系统table。您可以向其中添加新字段,但建议不要这样做。主要原因之一是您无法查询用户记录类型。
此外,我在您的代码中看到您查询的是 recordType Namer 而不是 Users。是你的问题错了还是你的代码错了?
在recordFetchedBlock
中你直接把结果放在.text
中。该块将在后台线程中执行。你应该先去mainQueue。你可以这样做:
AgeOp.recordFetchedBlock = {(record : CKRecord!) in
NSOperationQueue.mainQueue().addOperationWithBlock {
let Recorded : CKRecord = record!
self.nameText.text = Recorded.objectForKey("Name") as? String
}
}
当没有查询匹配时,将永远不会调用 .recordFetchedBlock
。您还应该设置 .queryCompletionBlock
查询可以return多条记录(如果有更多同名的人)。在 recordFetchedBlock
中,您应该将记录添加到数组中。然后在 .queryCompletionBlock
中你可以使用那个数组。