我使用nsnumberformatter将用户输入转换为nsnumber(十进制数字),我使用弧。
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可以返回零,即使调用[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 = "."