응용 프로그램이 시작될 때 CloudKit을 사용하여 파일을 다운로드하고 있습니다. 아직 다운로드하지 않은 모든 파일을 찾는 CKQuery가 있습니다. 다운로드 할 수있는 하나 또는 두 개의있을 때 그것은 잘 작동하지만 많은 수있을 때, 그것은 오류와 함께 실패합니다큰 세트를 반환 할 때 CKQuery가 실패 함
\"Server Rejected Request\" (15/2000); server message = \"Internal server error\";
이 장치 또는 시뮬레이터에 발생합니다.
관련 코드
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
}
}
편집
내가
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)
}
CKOperationQueue
를 사용하지만 여전히 같은 오류가 발생하는 내 코드를 업데이트했다.
관련 코드로 질문을 업데이트하십시오. – rmaddy
대부분 질문에 대한 답변은 http://stackoverflow.com/questions/29592964/ckquery-from-private-zone-returns-only-first-100-ckrecords-from-in-cloudkit입니다. – rmaddy
백 – milesper