2014-12-23 32 views
0

我想在這裏構建一個循環,這將允許我在Cloudkit儀表板上自由添加新桶,而無需更新該應用程序。我的recordType的一個屬性是Bucket,它是Int(64)類型。我有我的項目按桶分類,從1開始增加1.循環的目標是找到哪個桶沒有關聯的CKRecord,並返回最後一個有CKRecord的桶的編號,供稍後使用應用程序。iOS Swift Cloudkit performQuery函數

我的問題是,正如你所看到的,我包含了println()語句來檢查什麼是正在處理和什麼不是,當它打印「第一個」時,它從不打印「here」或「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降序上對查詢進行排序。第一個記錄將是最高的桶號。

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

你甚至可以通過使用CKQueryOperation和.resultsLimit設置爲1

0

我也意識到,我的NSPredicate是錯誤的限制結果。我使用以下內容對其進行了更正:

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