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

Bra*_*das 4 null decimal nsnumberformatter ios

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

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

_myNumber = [f numberFromString:myTextField.text];
Run Code Online (Sandbox Code Playgroud)

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

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

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

if (!myNumber){
    myNumber = [NSNumber numberWithFloat: myTextField.text.floatValue];
}
Run Code Online (Sandbox Code Playgroud)

有人知道为什么NSNumberFormatter可以返回nil,即使在调用时也是如此[NSNumber numberWithFloat: myTextField.text.floatValue]

小智 7

在我的例子中,解决方案是将NSNumberFormatter的"decimalSeparator"设置为".",例如:

NSNumberFormatter *formatString = [[NSNumberFormatter alloc] init];
formatString.decimalSeparator = @".";
Run Code Online (Sandbox Code Playgroud)