在NSPredicate中访问数字NSDictionary键

时间:2012-01-24 20:21:16

标签: objective-c ios nsdictionary nspredicate predicate

我正在尝试编写一个谓词来检查我设置的字典中的特定值。

此词典的字符串版本为“0”,“1”和“2”作为我想要访问的键。

我想写的谓词是:

$ player.currencyDictionaries.0.earned> 1000

问题是不允许使用.0。假设我无法轻易更改字典存储值的方式(这是旧版本,我想在服务器上托管所有版本时使用相同的谓词)有没有办法访问数据?

1 个答案:

答案 0 :(得分:2)

IIRC,你可以这样做:

$player.currencyDictionaries[0].earned > 1000

(您可能需要执行['0']以保证传递的值是字符串而不是数字)

请注意,此语法([0]在谓词格式字符串中有效。它不适用于关键路径。

此语法在Predicate BNF的“Index Expression”部分下定义。


修改

实际上,这不起作用,原因如下:

将读取字符串"$player.currencyDictionaries[0].earned"并将其转换为NSExpression类型NSKeyPathExpression。这意味着,当它被评估时,它将基本上采用该字符串并通过接收者的-valueForKeyPath:方法运行它。正如我上面提到的,括号语法不适用于键路径,因此会产生错误的答案。

但是,由于您知道currencyDictionaries返回NSDictionary,而NSDictionary overrides the -valueForKey: method,您可以将[0]位转换为关键路径,把它变成文字字符串:

$player.currencyDictionaries.'0'.earned