Nsnumberformatter在设备上返回零,而不是在模拟器上返回



我使用nsnumberformatter将用户输入转换为nsnumber(十进制数字),我使用弧。

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]工作?

在我的情况下,解决方案是为nsnumberformatter设置为"十分隔离器"。

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

为什么它可以在模拟器上使用,而不是在设备上依赖于语言设置。当我的设备设置为荷兰语时,我的模拟器设置为英语。用英语a。在使用荷兰语"中时,用作小数分离器。

在将原始值写入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];

我遇到了相同的问题,但没有文本输入,而是在小数分离器为"。"。使用Decimalnumberformatter在我的设备上失败(德国使用","),但在模拟器上不使用(可能使用美国区域设置)。

我的修复是确定小数分离器并将其提供给格式的对象:

    f.decimalSeparator = "."

相关内容

  • 没有找到相关文章

最新更新