4

NSNumberFormatter を使用して、ユーザー入力を NSNumber (10 進数) に変換します。ARC を使用します。

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setMaximumFractionDigits:1];

_myNumber = [f numberFromString:myTextField.text];

場合によっては、_myNumberになることがありますnil。ユーザー入力が正しい10進数であると確信している場合でも(デバッグ中に確認しました)。

完全を期すために: _myNumberViewController の合成プロパティです。これは、シミュレーターでアプリを実行したときではなく、デバイスでアプリを実行したときにのみ発生します。使用されているキーボードは「Decimal Pad」です。コードの別のセクションでは、別の ViewController でコードが機能します。

上記のコードの下に追加した回避策があります。

if (!myNumber){
    myNumber = [NSNumber numberWithFloat: myTextField.text.floatValue];
}

呼び出しが機能している場合でも、NSNumberFormatter が nil を返す理由を知っている人はいます[NSNumber numberWithFloat: myTextField.text.floatValue]か?

4

3 に答える 3

7

私の場合、ソリューションは NSNumberFormatter の「decimalSeparator」を「.」に設定しました。例:

NSNumberFormatter *formatString = [[NSNumberFormatter alloc] init];
formatString.decimalSeparator = @".";
于 2015-12-16T16:52:42.700 に答える
2

これがデバイスではなくシミュレータで機能する理由は、言語設定に依存していました。私のシミュレーターは英語に設定されていますが、デバイスはオランダ語に設定されています。英語の場合は「。」オランダ語で「,」が使用される場合、小数点として使用されます。

元の値を UITextField に書き込むときは、次のコードを使用しました。

_myTextField.text = [NSString stringWithFormat:@”%.1f”, [_myNumber floatValue]];

これにより、常に「。」が付きます。言語設定によって正しい場合と正しくない場合があります。私がしなければならなかったことは、NSNumberFormatter を使用して値を UITextField に設定することでした。

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setMaximumFractionDigits:1];

_myTextField.text = [f stringFromNumber:_myNumber];
于 2013-02-05T07:10:56.697 に答える
0

私は同じ問題を抱えていましたが、テキスト入力ではなく、小数点が "." である API を使用していました。DecimalNumberFormatter の使用は、デバイス (ドイツでは "," を使用) では失敗しますが、シミュレーター (米国地域設定を使用する可能性があります) では失敗しません。

私の修正は、小数点記号を決定し、それをフォーマッタ オブジェクトに提供することです。

    f.decimalSeparator = "."
于 2015-02-28T17:31:39.813 に答える