我正在用xcode 7 beta 5开发一个应用程序。当我在iPhone 6上运行我的应用程序,并且如果我的iPhone以wifi模式工作时,我尝试将其连接到CloudKit,就可以显示我的所有数据。但是,如果我的iPhone以LTE模式工作,则看不到任何数据。有谁知道如何做到这一点?
func getRecordsFromCloud() { lavori = [] / let _cloudContainer = CKContainer.defaultContainer() let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase / let predicate = NSPredicate(value: true) let query = CKQuery(recordType: "Lavori", predicate: predicate) / let queryOperation = CKQueryOperation(query: query) queryOperation.desiredKeys = ["image","name"] queryOperation.queuePriority = .VeryHigh queryOperation.resultsLimit = 50 queryOperation.recordFetchedBlock = { (record:CKRecord) -> Void in let lavoriRecord = record self.lavori.append(lavoriRecord) } queryOperation.queryCompletionBlock = { (cursor:CKQueryCursor?, error:NSError?) -> Void in if (error != nil) { print("Failed to get data from iCloud - \(error!.localizedDescription)") } else { print("Successfully retrieve the data from iCloud") dispatch_async(dispatch_get_main_queue(), { self.tableView.reloadData() }) } } / publicDatabase.addOperation(queryOperation) }
谢谢,Alessio
打开设置应用,找到您的应用,启用“使用移动数据”
更新: 如下所述,添加以下代码行解决了该问题:
queryOperation.qualityOfService = .UserInteractive
起作用的原因一定是时间/负载问题。我最初的猜测是这是由以下行引起的:
queryOperation.queuePriority = .VeryHigh
文档.queuePriority对此指出:您仅应在需要时使用优先级值来对非相关操作的相对优先级进行分类。
.queuePriority
文档中.qualityOfService对此进行了说明:此属性的默认值为NSOperationQualityOfServiceBackground,并且应尽可能保留该值。
.qualityOfService
因此,请尝试同时删除.queuePriority和.qualityOfService和,看看是否可以正常使用。
更新2: 显然这是一个CloudKit错误。更多的人有同样的问题。请在https://bugreport.apple.com报告