NSPredicate问题超过平等

时间:2013-08-02 07:11:42

标签: ios objective-c nspredicate

我有一个简单的NSPredicate,但没有给出正确的结果

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF.data.squareFootage >= %@", filterSquareFootage];
filteredArray = [[filteredArray filteredArrayUsingPredicate:resultPredicate] mutableCopy];

奇怪的是,这适用于所有6000> = 250,7000> = 250,8000> = 6000。但是,只要squareFootage == 10000,10000> =任何较小值的谓词都是false。 注意:10000 for squareFootage是使用UISlider获取的最大值。如果我将值减小到任何较小的值,则谓词结果为真

我在这里遗漏了什么并且错误地使用了谓词吗?

2 个答案:

答案 0 :(得分:22)

我假设你的属性存储为 string 而不是 number ,因此 将值作为字符串进行比较:

"10000" < "250" < "6000"

使用NSNumber代替NSString(或者某些标量类型为NSInteger)可以解决问题。

如果您无法更改squareFootage属性的数据类型,请执行以下操作 谓词应该有效:

[NSPredicate predicateWithFormat:@"SELF.data.squareFootage.intValue >= %d", [filterSquareFootage intValue]]

答案 1 :(得分:0)

你可以“使用=&lt; 来比较字符串。如果SELF.data.squareFootage是NSNumber,请尝试将filterSquareFootage转换为NSnumber或int值,并将它们进行比较。