我正在尝试在这里构建一个循环,让我可以在Cloudkit仪表板上自由添加新桶,而无需更新应用程序。我的recordType的一个属性是Bucket,它是Int(64)类型。我将我的项目按桶分类,从1开始增加1.循环的目标是找到哪个桶没有CKRecord关联,并返回最后一个具有CKRecord的桶的编号,以便稍后使用应用程序。
我的问题是,你可以看到我包含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 :(得分:0)
您只需执行一次查询即可完成相同操作。只需使用true谓词查询CardRecordType,然后在Bucket下降字段中对查询进行排序。第一条记录将是最高的Bucket数字。
query.sortDescriptors = [NSSortDescriptor(key: "Bucket", ascending: false)]
您甚至可以使用CKQueryOperation并将.resultsLimit设置为1来限制结果
答案 1 :(得分:0)
我也意识到我的NSPredicate是错误的。我用以下内容纠正了它:
let bucketPredicate = NSPredicate(format: "%K == %@", "Bucket", bucket as NSNumber)