我有一个对象数组,我想使用谓词进行过滤,但我无法弄清楚语法(或者是否不可能)。
假设该对象是位置,并且它具有纬度和经度的属性。我有一个名为 allLocations 的数组,我想生成一个新的位置数组,其中纬度属性大于30。
获取托管对象时,您只需使用属性名称,但不能使用数组:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"latitude > 30.0"];
没有返回匹配(尽管存在大量具有纬度> 30.0的位置对象。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.latitude > 30.0"];
也不好,而
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[SELF latitude] > 30.0"];
和
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[location latitude] > 30.0"];
抛出异常。
我运气不好吗?
答案 0 :(得分:2)
您正在寻找的是NSArray的filteredArrayUsingPredicate:
方法。当您将其传递给该方法时,上面的第一个谓词尝试将正常工作。
值得注意的是,NSMutableArray使用不同的方法来实现类似的效果,filterUsingPredicate:
。 MutableArray版本改变接收器,而Array版本返回一个新阵列。