在 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)
}
}
})
抱歉,如果我自己编写代码,我不能给你更多,如果我这样做,你最终会使用我的答案,我相信你的答案会更好:)
我在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)
}
} })
抱歉,如果我自己编写代码,我不能给你更多,如果我这样做,你最终会使用我的答案,我相信你的答案会更好:)