问题 iOS 9 CloudKit:查询在连接到蜂窝网络时不返回任何内容


我正在使用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


2786
2017-09-10 05:19


起源



答案:


打开设置应用,找到您的应用,启用“使用移动数据”

更新: 如下所述 添加以下代码行解决了问题:

queryOperation.qualityOfService = .UserInteractive

其工作原因必须是时间/负载问题。我最初的猜测是这是由这一行引起的:

queryOperation.queuePriority = .VeryHigh

文件说明了 .queuePriority 这个: 您应该仅根据需要使用优先级值来对非依赖操作的相对优先级进行分类。

文档说明了 .qualityOfService 这个: 此属性的默认值为NSOperationQualityOfServiceBackground,您应尽可能保留该值。

所以请尝试删除两者 .queuePriority 和 .qualityOfService 看看它是否有效

更新2: 显然这是一个CloudKit错误。更多人有同样的问题。请报告 https://bugreport.apple.com


13
2017-09-10 06:41



设置应用中的“使用移动数据”已启用... - Alessio Chiappe
奇怪,想不出任何其他原因。当然,从技术上讲,你在不同的网络上。这不是代码问题,而是网络问题。在这种情况下,您应该收到错误。是否有错误打印? - Edwin Vermeer
我也觉得这很奇怪......在同一个应用程序中我有一个rss阅读器,它与wifi和LTE完美配合......我没有任何打印错误 - Alessio Chiappe
你能尝试设置queryOperation.qualityOfService = .UserInteractive - Edwin Vermeer
twitter.com/bobard/status/644986352203751424 与CloudKit团队成员交谈 - kas-kad


答案:


打开设置应用,找到您的应用,启用“使用移动数据”

更新: 如下所述 添加以下代码行解决了问题:

queryOperation.qualityOfService = .UserInteractive

其工作原因必须是时间/负载问题。我最初的猜测是这是由这一行引起的:

queryOperation.queuePriority = .VeryHigh

文件说明了 .queuePriority 这个: 您应该仅根据需要使用优先级值来对非依赖操作的相对优先级进行分类。

文档说明了 .qualityOfService 这个: 此属性的默认值为NSOperationQualityOfServiceBackground,您应尽可能保留该值。

所以请尝试删除两者 .queuePriority 和 .qualityOfService 看看它是否有效

更新2: 显然这是一个CloudKit错误。更多人有同样的问题。请报告 https://bugreport.apple.com


13
2017-09-10 06:41



设置应用中的“使用移动数据”已启用... - Alessio Chiappe
奇怪,想不出任何其他原因。当然,从技术上讲,你在不同的网络上。这不是代码问题,而是网络问题。在这种情况下,您应该收到错误。是否有错误打印? - Edwin Vermeer
我也觉得这很奇怪......在同一个应用程序中我有一个rss阅读器,它与wifi和LTE完美配合......我没有任何打印错误 - Alessio Chiappe
你能尝试设置queryOperation.qualityOfService = .UserInteractive - Edwin Vermeer
twitter.com/bobard/status/644986352203751424 与CloudKit团队成员交谈 - kas-kad