我有一个简单的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获取的最大值。如果我将值减小到任何较小的值,则谓词结果为真
我在这里遗漏了什么并且错误地使用了谓词吗?
答案 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值,并将它们进行比较。