为什么10.4样式的NSNumberFormatter不能自动本地化十进制分隔符



最近我发现,使用设置为"OS X 10.0 Behavior"的NSNumberFormatter可能不再流行。因此,我将附加到几个NSTextFields的数字格式化程序更改为"10.4默认行为"和Decimal样式。

一切都很好,只是数字格式化程序在从US(.)区域设置切换到German(,)区域设置后不再自动本地化其十进制分隔符。在IB中创建数字格式化程序时,我似乎一直使用活动的十进制分隔符。

IB中的"localize"复选框并没有像预期的那样产生效果,因为setLocalizesFormat:被记录为只适用于10.0风格的格式化程序(这让我想知道为什么会有复选框)。

我现在的解决方法是在IB中设置一个自定义的NSNumberFormatter子类,如下所示:

- (void) awakeFromNib
{
self.decimalSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleDecimalSeparator];
}

我不敢相信这是正确的做法,因为10.0样式的格式化程序没有这个问题。

你知道我错过了什么吗?

谨致问候,Ilja

我已经确认您在Xcode的接口生成器中发现了一个错误——它在创建XIB时冻结了数字分组分隔符,如果选中"Localize"框,就不应该这样做。请提交雷达。

以下代码工作正常,并确保在运行时设置所有本地化属性(小数点、组分隔符等):

self.textFieldCell.formatter = [NSNumberFormatter new];
((NSNumberFormatter *)self.textFieldCell.formatter).numberStyle = NSNumberFormatterDecimalStyle;

最新更新