在 CloudKit 中使用比较谓词进行查询

Query with compare predicate in CloudKit

我在Cloudkit里面有一些CKRecords,记录有两个属性的int类型,可能叫'cost'和'price',我想查询记录'cost' > 'price',但是当我写这样的查询时应用程序崩溃了:

CKQuery *query = [[CKQuery alloc] initWithRecordType:@"MyRecordType" predicate:
[NSPredicate predicateWithFormat:@"cost > price"]];

这是Xcode给出的崩溃信息:

Terminating app due to uncaught exception 'CKException', reason: 'Invalid predicate, Invalid right expression, is not a function expression

请帮忙,提前致谢。

好的,

再想一想。

你查询了所有记录,但是select只有两个字段;成本和价格。

let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Whatever", predicate: predicate)
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["cost","price"]

然后您进行查询[这应该会更快],整理出您想要的记录,然后使用 publicDB.fetchRecordWithID 获取它们。

是的,我知道不止一个查询,实际上它看起来更多,但等等我认为 Cloudkit 中的 WWDC 2015 提示与技巧中有答案;观看 session,您可能也会在其中找到一些东西。如果您有记录 ID,这里是获取记录的代码。

publicDB.fetchRecordWithID(), completionHandler: {record, error in
if error != nil {
    println("there was an error \(error)")
} else {
    NSOperationQueue.mainQueue().addOperationWithBlock {
        self.plasticOne.text = (record.objectForKey("subCategory") as String)
    }

} })

抱歉,如果我自己编写代码,我不能给你更多,如果我这样做,你最终会使用我的答案,我相信你的答案会更好:)