我使用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]
有效吗?
答案 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 = "."