在 CloudKit 中使用比较谓词进行查询
Posted
技术标签:
【中文标题】在 CloudKit 中使用比较谓词进行查询【英文标题】:Query with compare predicate in CloudKit 【发布时间】:2017-06-01 04:17:04 【问题描述】:我在Cloudkit中有一些CKRecords,记录有两个int类型的属性,可能称为'cost'和'price',我想查询'cost'>'price'的记录,但是应用程序崩溃时我这样写一个查询:
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"MyRecordType" predicate:
[NSPredicate predicateWithFormat:@"cost > price"]];
这是 Xcode 给出的崩溃信息:
由于未捕获的异常'CKException'而终止应用程序,原因:'无效的谓词,无效的右表达式,不是函数表达式
请帮忙,提前谢谢。
【问题讨论】:
雷,我建议这是一个答案;但我不确定它会起作用 [NSPredicate predicateWithFormat: @"cost.@min.doubleValue @user3069232 谢谢你的帮助,我试过了,不幸的是还是同样的错误:价格不是函数表达式。 【参考方案1】:好的,
想了很多。
您查询所有记录,但只选择两个字段;成本和价格。
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 Tips & Tricks 中有答案;观看会议,您也可能会在其中找到一些东西。如果您有记录 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 中的记录有限,您的解决方案将起作用,我想在 CloudKit 中执行比较操作并在云中有数千条记录时返回所需的记录。 雷,这听起来像是一个挑战。数据从何而来?您可以在上传数据时标记数据吗?在您的方案中创建一个附加字段以表明其感兴趣的记录? 太好了,这就是我要找的答案,我可以在更新 'cost' 或 'price' 时添加一个标志来指示比较结果,非常感谢! @user3069232以上是关于在 CloudKit 中使用比较谓词进行查询的主要内容,如果未能解决你的问题,请参考以下文章
CloudKit 谓词:使用 CKQuery 的谓词搜索多个参考字段