适用于NSPredicate的CloudKit意外表达式

时间:2015-05-10 18:38:12

标签: ios cloudkit

我正在使用CloudKit,并希望根据字符串字段搜索记录。

Apple文档说这是对记录字段进行标记化搜索的方法:

  

要对记录的字段执行标记化搜索,请使用特殊运算符self。标记化搜索会搜索启用了全文搜索的任何字段,默认情况下这是所有基于字符串的字段。清单5显示了一个示例,它在记录的字段中搜索令牌字符串bob和smith。为了搜索,每个不同的单词被视为单独的标记。比较是不区分大小写和不区分大小写的。这些令牌字符串可以在单个字段或多个字段中找到,但所有令牌必须存在于记录中才能被视为匹配。

     

清单5:匹配包含标记化字符串的字段

NSPredicate predicate = nil;
predicate = [NSPredicate predicateWithFormat:@"self contains 'bob smith'"];

当我为谓词输入这个确切的字符串时,我得到了一个例外。

代码:

predicate = [NSPredicate predicateWithFormat:@"self contains 'bob smith'"];
query = [[CKQuery alloc] initWithRecordType:kCKRecord_Level predicate:predicate];

例外:

*** Terminating app due to uncaught exception 'CKException', reason: 'Unexpected expression: SELF CONTAINS "bob smith"'

任何想法都可能出错?有没有人使用该谓词字符串和CloudKit获得任何成功?

https://developer.apple.com/library/prerelease/ios/documentation/CloudKit/Reference/CKQuery_class/index.html

1 个答案:

答案 0 :(得分:3)

看起来'自包含'不再起作用了。您仍然使用此谓词进行标记化搜索:

NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", "bob smith")