8

正しい結果が得られない単純な NSPredicate があります

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

奇妙なことに、これはすべての 6000>=250、7000>=250、8000>=6000 で機能します。しかし、squareFootage==10000 となるとすぐに、10000>= より小さい値の述語は false になります。注: squareFootage の 10000 は、UISlider を使用してフェッチされた最大値です。値をより小さい値に減らすと、述語は結果として true を返します。

ここで何かが欠けていて、述語を間違って使用していますか?

4

2 に答える 2

22

プロパティはnumberではなくstringとして保存されていると想定しているため、値は文字列として比較されます。

"10000" < "250" < "6000"

NSNumberの代わりにNSString(または代わりにスカラー型を as として)使用NSIntegerすると、問題が解決するはずです。

プロパティのデータ型を変更できない場合はsquareFootage、次の述語が機能するはずです。

[NSPredicate predicateWithFormat:@"SELF.data.squareFootage.intValue >= %d", [filterSquareFootage intValue]]
于 2013-08-02T07:17:29.377 に答える