我有一个对象数组,我想使用谓词过滤这些对象,但我一直无法弄清楚语法(或者是否不可能)。
假设对象是位置,它具有纬度 和经度 属性。我有一个名为 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"];
抛出异常。
我运气不好吗?
最佳答案
您正在寻找的是 NSArray 的 filteredArrayUsingPredicate:
方法。当您将上面的第一个谓词尝试传递给该方法时,它会正常工作。
值得注意的是,NSMutableArray 使用不同的方法来实现类似的效果,filterUsingPredicate:
。 MutableArray 版本更改接收器,而 Array 版本返回一个新数组。
关于iphone - 使用谓词过滤数组中对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365713/