NSNumberFormatter在设备上返回nil,而不是在模拟器上返回

时间:2012-12-21 11:37:34

标签: ios decimal null nsnumberformatter

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

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

_myNumber = [f numberFromString:myTextField.text];

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

为了完整性:_myNumber是ViewController的综合属性。 这仅在设备上运行应用程序时发生,而不是在我在模拟器中运行时。 正在使用的键盘是'Decimal Pad' 在代码的不同部分,在不同的ViewController中,代码可以正常工作。

我现在有一个解决方法,我在上面的代码下面添加了:

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

有人知道为什么NSNumberFormatter可以返回nil,即使调用[NSNumber numberWithFloat: myTextField.text.floatValue]有效吗?

3 个答案:

答案 0 :(得分:7)

在我的情况下,解决方案设置为" decimalSeparator"对于NSNumberFormatter来说,"。",例如:

NSNumberFormatter *formatString = [[NSNumberFormatter alloc] init];
formatString.decimalSeparator = @".";

答案 1 :(得分: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];

答案 2 :(得分:0)

我有相同的问题,但没有使用文本输入,但使用了一个API,其中小数点分隔符为"。"。在我的设备上使用DecimalNumberFormatter失败(德国使用",")但在模拟器上没有(可能使用美国区域设置)。

我的修复是确定小数分隔符并将其提供给formatter对象:

    f.decimalSeparator = "."