首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CKQuery与CloudKit问题

CKQuery与CloudKit问题
EN

Stack Overflow用户
提问于 2015-09-14 21:55:33
回答 1查看 206关注 0票数 0

我对CloudKit非常陌生,我只是在尝试运行最基本的查询。我想从RecordType中提取“用户”和字段类型“名称”,并拥有与我的nameText标签相同的名称!

请参阅我的代码如下:

代码语言:javascript
运行
复制
 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()
        }
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-15 06:03:04

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

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

recordFetchedBlock中,直接将结果放到.text中。该块将在后台线程中执行。你应该先去mainQueue。你可以这样做:

代码语言:javascript
运行
复制
AgeOp.recordFetchedBlock = {(record : CKRecord!) in
  NSOperationQueue.mainQueue().addOperationWithBlock { 
    let Recorded : CKRecord = record!
    self.nameText.text = Recorded.objectForKey("Name") as? String
   } 
}

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32574560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档