ユーザーが数値(浮動小数点数または整数)を入力します。数値は下限より大きくなければなりません。
これは、UITextFieldから番号を取得するためのコードです。
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *currentNumber = [f numberFromString:self.textfield.text];
[f release];
多くの場合、下限は0.1lowerBound
です(NSNumberです)。
このコードがあり、テキストフィールドに0.1と入力すると、そのisValid
ままになりYES
ます。
BOOL isValid = YES;
if ([currentNumber floatValue] < [self.lowerBound floatValue]) {
isValid = NO;
}
しかし、私はそれを行う方が良いでしょうが:
BOOL isValid = YES;
if ([currentNumber compare:self.lowerBound] == NSOrderedAscending) {
isValid = NO;
}
ただし、もう一度0.1を入力します(そしてlowerBoundはまだ0.1です)ifステートメントはtrueと評価されます(currentNumberがself.lowerBoundよりも小さいかのように)。
コードは0.11以上で期待どおりに機能します。私にも上限があります:
BOOL isValid = YES;
if ([currentNumber compare:self.higherBound] == NSOrderDescending) {
isValid = NO;
}
そして、これは、higherBoundと同じ値(ほとんどの場合10)を入力した場合を含め、期待どおりに機能します。
私が理解しているようにcompare:
、NSNumberのメソッドはオブジェクトのアドレスではなく値を比較しますが、なぜそれが下限で機能しないのですか?