CloudKit fetchUserRecordIDWithCompletionHandler 完成代码未调用?

Posted

技术标签:

【中文标题】CloudKit fetchUserRecordIDWithCompletionHandler 完成代码未调用?【英文标题】:CloudKit fetchUserRecordIDWithCompletionHandler completion code not calling? 【发布时间】:2015-07-08 19:59:38 【问题描述】:

我正在尝试使用 fetchUserRecordIDWithCompletionHandler 从 CloudKit 获取当前用户 ID,但是当我运行代码时,完成处理程序被跳过。

let container = CKContainer.defaultContainer()
let publicDatabase = container.publicCloudDatabase

var userID: CKRecordID!

container.fetchUserRecordIDWithCompletionHandler(  recordID, error in
    if error == nil 
        userID = recordID

     else 
        NSLog("\(error.localizedDescription)")
    
)


let predicate = NSPredicate(format: "personID = \(userID)")

let query = CKQuery(recordType: "Person", predicate: predicate)

因此,userID 的值保持为nil,因此查询会因此而引发异常

【问题讨论】:

【参考方案1】:

完成处理程序只会在获取请求完成后运行,这将异步发生。因此,您不能在调用后立即使用 fetch 请求的结果。将该查询移动到代码的其他部分的完成处理程序中,这些部分可以从处理程序调用或以其他方式触发。

【讨论】:

以上是关于CloudKit fetchUserRecordIDWithCompletionHandler 完成代码未调用?的主要内容,如果未能解决你的问题,请参考以下文章

CloudKit 批量获取?

CloudKit 的单元测试

cloudKit:公共数据库中的 CKFetchRecordChangesOperation

无法初始化 CloudKit 架构,因为协调器中没有存储配置为使用 CloudKit

Cloudkit 与组合

Swift 2 和 Cloudkit 的通知