它在 10.8 发行说明中有所记录:
NSString 本地化格式
在 10.8 中,在与 10.8 SDK 链接的应用程序中,-localizedStringWithFormat: 和 -initWithFormat:locale:(和朋友)在提供非零语言环境时,现在将对数字进行本地化格式化。以前这些调用已经做了小数点处理;所以在某些语言环境中,逗号将用于小数点分隔符。这种新行为以此为基础,使用本地化数字以及千位分隔符和正确放置符号符号。
但是我仍然认为它是一个错误(并提交了它),它存在许多问题(与旧版 UI 一起使用,手动编辑时偶尔会出现错误行为等)。
对于新的 UI,您最好在您的 nib 中添加一个数字格式化程序,用于所有显示数字的文本字段。
如果(就像我的例子)你有很多带有更多文本字段的 nib 文件,这个丑陋的 hack 可能会有所帮助:
#import "HHUTextFieldCell.h"
@implementation HHUTextFieldCell //:: NSTextFieldCell
//*****************************************************************************
// Class methods
//*****************************************************************************
+ (void)load {
//
// 10.8 started using thousands separators for text fields. For our legacy
// apps we don't want those. Rather than changing dozens of xib files with
// hundreds of text fields, we use a replacement class to modify the text
// fields to not have a thousands separator.
//
[NSKeyedUnarchiver setClass:[HHUTextFieldCell class] forClassName:@"NSTextFieldCell"];
}
//*****************************************************************************
// Overwritten methods
//*****************************************************************************
- (void)setObjectValue:(id < NSCopying >)object {
//
// If `object` is an NSNumber object and no formatter is set, we instead
// set the description of that number via -setStringValue:. Otherwise
// use the original implementation.
//
if(!self.formatter && [(NSObject *)object isKindOfClass:[NSNumber class]])
{
[super setStringValue:[(NSObject *)object description]];
}
else
{
[super setObjectValue:object];
}
}
@end