2014-12-23 31 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)