【发布时间】:2015-04-05 10:46:18
【问题描述】:
我正在尝试创建 CloudKit 文本搜索查询。 有效的是查询以搜索文本开头的记录,如下所示:
NSPredicate(format: "Text BEGINSWITH %@", searchText)!
标记搜索也可以使用(查询输入的单词是否在记录中的某处),如下所示:
NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", searchText)!
您可以在EVCloudKitDao 的演示应用程序中看到这些查询(见屏幕截图)
但现在我想将这两个查询结合起来,让结果感觉更完整。我尝试使用此查询:
NSPredicate(format: "Text BEGINSWITH %@ OR allTokens TOKENMATCHES[cdl] %@", searchText, searchText)!
但是我会得到这个 CloudKit 错误:
由于未捕获的异常“CKException”而终止应用程序,原因: '意外的表达式:文本 BEGINSWITH "Y" OR allTokens 代币匹配[cdl] "Y"'
此外,我还尝试了这样的 NSCompoundPredicate:
var p1 = NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", searchText)!
var p2 = NSPredicate(format: "Text BEGINSWITH %@", searchText)!
var p = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType, subpredicates: [p1, p2])
但是那个给出了同样的错误:
由于未捕获的异常“CKException”而终止应用程序,原因: '意外的表达式:allTokens TOKENMATCHES[cdl] "y" OR Text 以“y”开头
奇怪的是,它在使用 AndPredicateType 而不是 OrPredicateType 时确实有效
有没有人知道这样的查询的替代解决方案? 由于它用于自动完成功能,因此执行 2 次查询并组合结果并不是一个真正的选择。
【问题讨论】:
-
您是否尝试过使用 NSCompoundPredicate 代替?
-
感谢您的提示。不幸的是,它具有相同的结果。在谓词中使用 OR 似乎存在问题。
标签: search full-text-search nspredicate cloudkit