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

2019-07-17 12:05发布

我用NSNumberFormatter于用户输入转换成的NSNumber(十进制数),我使用ARC。

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

_myNumber = [f numberFromString:myTextField.text];

有时,这会导致_myNumbernil 。 即使我绝对相信用户的输入是正确的十进制数(我在调试期间检查)。

为了完整性: _myNumber是ViewController中的合成特性。 这只是一个设备上运行应用程序时,而不是当我在模拟器中运行它发生。 所使用的键盘是“十进制垫”在代码不同的部分,在不同的ViewController代码确实工作。

我现在有我所上面的代码中加入以下一种解决方法:

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

有谁知道为什么NSNumberFormatter可以回到零,称即使[NSNumber numberWithFloat: myTextField.text.floatValue]的作品?

Answer 1:

在我的情况下,溶液中设置“decimalSeparator”为NSNumberFormatter来,例如“”:

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


Answer 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];


Answer 3:

我有同样的问题,但不与文本输入,但与消耗的API,其中小数点分隔符是“”。 使用DecimalNumberFormatter在我的设备出现故障(德国使用“”),但不是在模拟器(可能采用美国地区设置)。

我的解决方法是确定小数点分隔符并将其提供给格式化对象:

    f.decimalSeparator = "."


文章来源: NSNumberFormatter returns nil on device, not on simulator