首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回大集合时CKQuery失败

返回大集合时CKQuery失败
EN

Stack Overflow用户
提问于 2016-06-05 21:57:44
回答 2查看 211关注 0票数 1

当应用程序启动时,我使用CloudKit下载文件。我有一个CKQuery,查找所有尚未下载的文件。当只有一两个下载时,它可以正常工作,但是当有一个大的数字时,它会失败并出现错误:

“服务器拒绝请求”(15/2000);服务器消息=\“内部服务器错误”;

这种情况发生在设备或模拟器上。

相关代码

代码语言:javascript
运行
复制
    let container = CKContainer(identifier: "iCloud.quaritate.Agni")
    let publicDB = container.publicCloudDatabase
    let privateDB = container.privateCloudDatabase

    let predicate = NSPredicate(format: "NOT (%@ CONTAINS Name)", downloadedTitles)
    let query = CKQuery(recordType: "List", predicate: predicate)
    publicDB.performQuery(query, inZoneWithID: nil, completionHandler: {
        results, error in
        if error != nil{
            //error getting lists
            NSLog("\(error?.description)")
        }else{
            //got lists
        }
    }

编辑

我更新了我的代码以使用CKOperationQueue

代码语言:javascript
运行
复制
func getNewWords(){
    let predicate = NSPredicate(format: "NOT (%@ CONTAINS Name)", downloadedTitles)
    let query = CKQuery(recordType: "List", predicate: predicate)

    let queryOperation = CKQueryOperation(query: query)
    let operationQueue = NSOperationQueue()
    self.executeQueryOperation(queryOperation, onOperationQueue: operationQueue)
}

func executeQueryOperation(queryOperation: CKQueryOperation, onOperationQueue operationQueue: NSOperationQueue) {
    NSLog("Executing query operation")
    let container = CKContainer(identifier: "iCloud.quaritate.Agni")
    let publicDB = container.publicCloudDatabase

    queryOperation.database = publicDB

    queryOperation.recordFetchedBlock = {(record:CKRecord) in
        self.saveRecord(record)
    }

    queryOperation.queryCompletionBlock = {(cursor:CKQueryCursor?, error:NSError?)->Void in
        guard error == nil else{
            NSLog("Query error: \(error?.description)")
            return
        }
        if let queryCursor = cursor { //there are more operations to execute
            let queryCursorOperation = CKQueryOperation(cursor: queryCursor)
            self.executeQueryOperation(queryCursorOperation, onOperationQueue: operationQueue)
        }
    }
    operationQueue.addOperation(queryOperation)
}

但仍然会收到同样的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-14 23:59:06

重复检查downloadedTitles不是空数组.如果在这样的查询中发送空数组,服务器将返回此错误。

这是来自服务器的错误--我提交了一个错误,希望在本例中返回更好的错误消息(或者根本没有结果)。

票数 3
EN

Stack Overflow用户

发布于 2016-06-11 10:52:00

嗯,这可能实际上是内部错误。我也遇到过CloudKit的错误,并且在苹果开发者论坛上的报告之后被修正了。试试看,苹果公司的开发人员可能会对你的问题做些什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37647185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档