一尘不染

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

swift

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


阅读 227

收藏
2020-07-07

共1个答案

一尘不染

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

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

queryOperation.qualityOfService = .UserInteractive

起作用的原因一定是时间/负载问题。我最初的猜测是这是由以下行引起的:

queryOperation.queuePriority = .VeryHigh

文档.queuePriority对此指出:您仅应在需要时使用优先级值来对非相关操作的相对优先级进行分类。

文档中.qualityOfService对此进行了说明:此属性的默认值为NSOperationQualityOfServiceBackground,并且应尽可能保留该值。

因此,请尝试同时删除.queuePriority.qualityOfService和,看看是否可以正常使用。

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

2020-07-07