使用NSPredicate ANY和IN过滤NSArray与NSDictionary(对象的嵌套级别)?

时间:2016-05-31 11:37:17

标签: filter nsarray nsdictionary nspredicate

我有一个名为 originalListArray 的主数组,包含多个对象。这是对象的示例。 Example.json

我想找到 originalListArray 中的对象数量,其中amenity_id与我的过滤数据匹配。 我已经这样做了,创建一个谓词,使用 ANY 而不是自我,因为NSArray使用NSDictionary,并且该Dictionary对象可能有NSArray数据。

这很好。

 NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id =='1')"];

这不起作用。

 NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id in ('1','2','3')"];

因此可以轻松过滤单个值,但是使用IN操作它的崩溃和错误是这样的。

由于未捕获的异常'NSInvalidArgumentException'而终止应用,原因:'无法解析格式字符串“ANY amenities.amenity_id in('1','2','3')”'< / EM>

先谢谢,如果有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

我认为将数组作为%@占位符的参数传递会更好。

[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN %@", @[@"1",@"2",@"3"]]

这样,您可以手动创建阵列,如果需要更改它,则更容易。

如果您仍然希望手动更改&#34;字符串格式&#34;:

[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN {'1', '2', '3'}"]