我用NSNumberFormatter于用户输入转换成的NSNumber(十进制数),我使用ARC。
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]
的作品?
在我的情况下,溶液中设置“decimalSeparator”为NSNumberFormatter来,例如“”:
NSNumberFormatter *formatString = [[NSNumberFormatter alloc] init];
formatString.decimalSeparator = @".";
为什么这是工作的模拟器,而不是设备依赖于语言设置。 而我的设备设置为荷兰语我的模拟器设置为英语。 当英语“”作为小数点分隔符,在荷兰一“”被使用。
当写原始值的的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];
我有同样的问题,但不与文本输入,但与消耗的API,其中小数点分隔符是“”。 使用DecimalNumberFormatter在我的设备出现故障(德国使用“”),但不是在模拟器(可能采用美国地区设置)。
我的解决方法是确定小数点分隔符并将其提供给格式化对象:
f.decimalSeparator = "."