2014-12-23 2 views
0

나는이 앱을 업데이트하지 않고도 Cloudkit 대시 보드에 새로운 버킷을 자유롭게 추가 할 수 있도록 여기 루프를 만들려고합니다. 내 recordType의 속성 중 하나는 Bucket이고 Int (64) 유형입니다. 내 항목은 버킷별로 분류되어 1 씩 증가합니다. 루프의 목표는 CKRecord가 연관되지 않은 버킷을 찾고 나중에 사용할 수 있도록 CKRecord가있는 마지막 버킷의 번호를 반환하는 것입니다. 앱.iOS Swift Cloudkit performQuery function

제 문제는 처리되는 내용과 확인되지 않은 내용을 확인하기 위해 println() 문을 포함하고 "처음"으로 인쇄하는 동안 절대로 "여기"또는 "there"로 인쇄하지 않았습니다. 그것은 결코 performQuery 함수를 실행하지 않았습니다.

미리 도움 주셔서 감사합니다.

for bucket in 1...1000 { 

     let bucketPredicate = NSPredicate(format: "Bucket = \(bucket)") 
     let bucketQuery = CKQuery(recordType: "CardRecordType", predicate: bucketPredicate) 

     // Make this error handling perfect 
     println("first") 
     publicDatabase.performQuery(bucketQuery, inZoneWithID: nil) { 
      results, error in 
      if error != nil { 
       println("here") 
       if error.code == 11 { 
        println(error.localizedDescription) 
        var bucketNumber = (bucket - 1) 
       } 
       else { 
        println(error.localizedDescription) 
       } 
      } 
      else { 
       println("there") 
       println(results) 
      } 
     } 
    } 

답변

0

하나의 쿼리 만 수행하면됩니다. 진정한 술어로 CardRecordType을 쿼리하고 Bucket descending 필드에 쿼리를 정렬하십시오. 첫 번째 레코드는 가장 높은 버킷 번호가됩니다.

query.sortDescriptors = [NSSortDescriptor(key: "Bucket", ascending: false)] 

당신도 CKQueryOperation을 사용하고 나 또한 내 자 NSPredicate 잘못된 것을 깨달았다 1

0

에 .resultsLimit를 설정하여 결과를 제한 할 수 있습니다. 다음과 같이 수정했습니다.

let bucketPredicate = NSPredicate(format: "%K == %@", "Bucket", bucket as NSNumber)