0

我正在使用 NSPredicate 过滤 NSDictionary 对象的 NSArray 的内容。没什么疯狂的。我想在字典中检查相同搜索字符串的三个不同值。这是我传递给的字符串[NSPredicate predicateWithFormat:]

($ECInstanceLabel CONTAINS[c] filterMe) OR (SubLabel1 CONTAINS[c] filterMe) OR (SubLabel2 CONTAINS[c] filterMe)

当我执行此操作时,会创建一个新的 NSPredicate 的有效实例,但是当我执行此操作时[NSArray filteredArrayUsingPredicate:],应用程序会引发异常。

例外是:

'NSInvalidArgumentException',原因:'无法在绑定 {} 中获取 'ECInstanceLabel' 的值。

我认为问题的一部分是我的格式字符串指定第一个字典键值是$ECInstanceLabel但不知何故$被转义了。我尝试手动转义这个字符,但是当我尝试创建谓词时程序崩溃,所以我不认为该$符号被识别为可转义字符。

任何想法或明显的东西我可能会丢失?

提前致谢。

4

1 回答 1

3

$var用于以后可以替换的变量的谓词。如果您有一个包含$或其他特殊字符的键,则使用%K扩展:

 [NSPredicate predicateWithFormat:@"(%K CONTAINS[c] %@) OR (SubLabel1 CONTAINS[c] %@) OR (SubLabel2 CONTAINS[c] %@)",
          @"$ECInstanceLabel", searchTerm, searchTerm, searchTerm]

并使用%@搜索词的格式而不是内联写入,以避免在搜索词包含特殊字符时出错。

当然,您可以%@所有键使用,但在这种情况下,您只需要对包含特殊字符的第一个键使用它。

于 2014-02-20T18:34:34.047 回答