iOS Swift Cloudkit执行查询功能

时间:2014-12-23 01:10:05

标签: ios swift cloudkit

我正在尝试在这里构建一个循环,让我可以在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)
            }
        }
    }

2 个答案:

答案 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)