【问题标题】:Filter NSArray with NSDictionary (nested level of object) using NSPredicate ANY and IN?使用 NSPredicate ANY 和 IN 过滤 NSArray 和 NSDictionary(对象的嵌套级别)?
【发布时间】:2016-09-29 09:44:41
【问题描述】:

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

我想从 originalListArray 中找到 amenity_id 与我的过滤器数据匹配的对象数量。 我已经这样做了,创建一个谓词使用 ANY 而不是 self 因为 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')"];

所以单个值可以很容易地过滤,但使用登录操作它的崩溃和错误是这样的。

由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'无法解析格式字符串“任何便利设施.amenity_id in ('1','2','3')”'

非常感谢,如果有人可以帮助我。

【问题讨论】:

  • [NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN %@", @[@"1",@"2",@"3"]]?
  • @Larme 是的,它的工作原理。首先感谢您的快速回复,但我不明白为什么我必须作为数组传递。因为 IN 查询我们通常以逗号分隔值作为字符串传递。
  • 如果您记录工作谓词,您会看到它实际上是@"ANY amenities.amenity_id IN {'1', '2', '3'}"(使用手镯而不是括号)。不,如果需要,使用占位符 (%@) 传递它可以更轻松地进行更改。
  • @Larme 好的,谢谢。 :)

标签: filter nsarray nsdictionary nspredicate


【解决方案1】:

我认为最好使用%@ 占位符将数组作为参数传递。

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

这样,您可以手动创建数组,如果需要更改它,会更容易。

如果您仍然希望它手动更改“字符串格式”:

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

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 2013-11-20
    • 2012-08-02
    • 2010-10-31
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2015-11-16
    • 2011-11-11
    相关资源
    最近更新 更多