iOS 9 CloudKit:查询在连接到蜂窝网络时没有 return 任何内容
iOS 9 CloudKit: query does not return anything while connected to cellular network
我正在使用 xcode 7 beta 5 开发应用程序。当我 运行 我的应用程序在我的 iphone 6 上时,我尝试将它连接到 CloudKit如果我的 iphone 在 wifi 模式下工作一切正常,我会显示我所有的数据;但是如果我的 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)
}
谢谢,阿莱西奥
打开设置应用,找到您的应用,启用'use mobile data'
更新: 如下所述
添加以下代码行解决了问题:
queryOperation.qualityOfService = .UserInteractive
这一定是时间/负载问题。我最初的猜测是,这是由这一行引起的:
queryOperation.queuePriority = .VeryHigh
.queuePriority
的文档说明:
您应该仅在需要时使用优先级值来对非依赖操作的相对优先级进行分类。
.qualityOfService
的文档指出:
这个 属性 的默认值是 NSOperationQualityOfServiceBackground 并且您应该尽可能保留该值。
所以请尝试删除 .queuePriority
和 .qualityOfService
看看它是否有效。
更新 2: 显然这是一个 CloudKit 错误。更多的人有同样的问题。请在 https://bugreport.apple.com
举报
我最终通过打开 iCloud Drive 数据设置解决了这个问题。这实际上很难找到。我在 ios 14.1。我的设置路径是:
设置 -> 移动数据 -(然后在移动数据的右下方) -> iCloud Drive。
我打开了它,然后一切正常。
我正在使用 xcode 7 beta 5 开发应用程序。当我 运行 我的应用程序在我的 iphone 6 上时,我尝试将它连接到 CloudKit如果我的 iphone 在 wifi 模式下工作一切正常,我会显示我所有的数据;但是如果我的 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)
}
谢谢,阿莱西奥
打开设置应用,找到您的应用,启用'use mobile data'
更新: 如下所述 添加以下代码行解决了问题:
queryOperation.qualityOfService = .UserInteractive
这一定是时间/负载问题。我最初的猜测是,这是由这一行引起的:
queryOperation.queuePriority = .VeryHigh
.queuePriority
的文档说明:
您应该仅在需要时使用优先级值来对非依赖操作的相对优先级进行分类。
.qualityOfService
的文档指出:
这个 属性 的默认值是 NSOperationQualityOfServiceBackground 并且您应该尽可能保留该值。
所以请尝试删除 .queuePriority
和 .qualityOfService
看看它是否有效。
更新 2: 显然这是一个 CloudKit 错误。更多的人有同样的问题。请在 https://bugreport.apple.com
举报我最终通过打开 iCloud Drive 数据设置解决了这个问题。这实际上很难找到。我在 ios 14.1。我的设置路径是:
设置 -> 移动数据 -(然后在移动数据的右下方) -> iCloud Drive。
我打开了它,然后一切正常。