4

我使用 NSNumberFormatter 将用户输入转换为 NSNumber(十进制数),我使用 ARC。

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

_myNumber = [f numberFromString:myTextField.text];

有时这会_myNumber导致nil. 即使我绝对确定用户输入的是正确的十进制数(我在调试期间检查过)。

为了完整性:_myNumber是 ViewController 的综合属性。这只发生在设备上运行应用程序时,而不是我在模拟器中运行它时。使用的键盘是“十进制键盘”。在不同的代码部分,在不同的 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 回答