2016-06-05 4 views
2

응용 프로그램이 시작될 때 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

를 사용하지만 여전히 같은 오류가 발생하는 내 코드를 업데이트했다.

+0

관련 코드로 질문을 업데이트하십시오. – rmaddy

+0

대부분 질문에 대한 답변은 http://stackoverflow.com/questions/29592964/ckquery-from-private-zone-returns-only-first-100-ckrecords-from-in-cloudkit입니다. – rmaddy

+0

백 – milesper

답변

4

downloadedTitles이 빈 배열이 아닌지 다시 확인하십시오. 이와 같은 쿼리에서 빈 배열이 전송되면 서버는이 오류를 반환합니다.

이것은 서버의 오류입니다.이 경우 더 나은 오류 메시지 (또는 단순히 결과가 없음)가있는 버그를 제출했습니다.

+2

당신은 그것이 무엇인지 알고 있습니다. 오류 메시지가 잘못되었습니다. – milesper

1

음, 실제로는 내부 오류 일 수 있습니다. CloudKit에서 버그가 발생하여 Apple Developer Forums에서 보고서를 수정했습니다. 거기서 시도해보십시오, 애플의 개발자들은 당신의 문제에 대해 뭔가를 할 것입니다.

+0

도움을 주셔서 감사합니다. 사실 farktronix가 말한 것이 었습니다. – milesper