如何使用NSPredicate过滤数组,使得一个属性的值大于其他属性?

时间:2013-02-13 18:02:10

标签: ios objective-c nspredicate

我有一个对象数组,它们有两个属性X和Y(都是NSString)。我想使用谓词过滤数组,以便所有过滤的对象都具有X>是的。目前,我正在使用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(X > Y"];

我的程序在此行崩溃了。编写这个谓词的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

尝试-[NSPredicate predicateWithBlock:]

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(MyClass *object, NSDictionary *bindings) {
        return [object.x compare:object.y] == NSOrderedDescending;
}];

这假定xy是您想要按字母顺序排列的字符串。如果情况并非如此,请编辑您的问题以准确说明x> y代表字符串意味着。

答案 1 :(得分:2)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"X > Y"];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(X > Y)"];

应该可以正常工作,我想你错过了)

查看Apple的文档:Predicate Format String Syntax了解更多信息。

答案 2 :(得分:1)

这是你拥有的吗?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(X > Y"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(X > Y)"];

因为缺少')' 你想要比较什么? string.length> string.length减?或者它是一个数字@“3”> @ “5”?

这是您的Predicate programming guide