2012-12-21 71 views
4

我使用NSNumberFormatter将用户输入转换为NSNumber(十进制数),我使用ARC。NSNumberFormatter在设备上返回nil,而不是在模拟器上

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

_myNumber = [f numberFromString:myTextField.text]; 

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

为了完整性:_myNumber是ViewController的综合属性。 这只发生在设备上运行应用程序时,而不是在模拟器中运行时发生。 正在使用的键盘是'Decimal Pad' 在不同的代码段中,在不同的ViewController中,代码确实有效。

我现在,我已经在上面的代码下面添加了一个解决办法:

if (!myNumber){ 
    myNumber = [NSNumber numberWithFloat: myTextField.text.floatValue]; 
} 

有谁知道为什么NSNumberFormatter可以回到零,调用[NSNumber numberWithFloat: myTextField.text.floatValue]作品甚至当?

+0

“myTextField.text.floatValue”在模拟器和设备中返回什么? –

+0

它返回正确的十进制数(float),就像它已经被输入一样。 – Brabbeldas

回答

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]; 
0

我有同样的问题,但不与文本输入,但与消耗的API,其中小数点分隔符是“”。在我的设备上使用DecimalNumberFormatter失败(德国使用“,”),但不在模拟器上(可能使用美国地区设置)。

我的解决办法是确定小数分隔符并且将其提供到格式化对象:“”

f.decimalSeparator = "." 
6

在我的情况将溶液设置“decimalSeparator”为NSNumberFormatter于,例如:

NSNumberFormatter *formatString = [[NSNumberFormatter alloc] init]; 
formatString.decimalSeparator = @"."; 
相关问题