【发布时间】:2016-06-05 21:57:44
【问题描述】:
我正在使用 CloudKit 在启动应用程序时下载文件。我有一个 CKQuery 可以找到所有尚未下载的文件。只下载一两个的时候可以正常下载,但是下载量很大的时候就失败了,报错:
\"服务器拒绝请求\" (15/2000); server message = \"内部服务器错误\";
这发生在设备或模拟器上。
相关代码
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
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)
}
但仍然收到同样的错误。
【问题讨论】:
-
用相关代码更新您的问题。
-
您的问题很可能与stackoverflow.com/questions/29592964/…重复
-
不低于一百
-
您仍然需要使用相关代码更新您的问题。
-
你真的应该使用
CKQueryOperation。你有更多的控制权,可以处理更多的情况。