Это несколько задокументированы в примечаниях 10,8 выпуска:
NSString локализованным форматирования
В 10.8 в приложениях, связанных с 10.8 SDK, -localizedStringWithFormat :, и -initWithForm at: locale: (и друзей), когда он снабжен не-nil-локалью, теперь будет выполнять локализованное форматирование чисел. Ранее эти вызовы уже обрабатывали десятичную точку; поэтому в некоторых локалях запятая будет использоваться для разделителя десятичной точки. Это новое поведение основывается на этом, чтобы использовать локализованные цифры, а также разделители тысяч и правильное размещение символа знака.
Однако я все еще считаю это ошибкой (и подал ее), с ней много проблем (завинчивание с устаревшими пользовательскими интерфейсами, иногда неправильное поведение при редактировании вручную и т. Д.).
Для новых пользовательских интерфейсов вы, вероятно, лучше всего добавляете число форматирования в свой наконечник, который вы используете для всех текстовых полей, отображающих числа.
Если (как в моем случае) у вас есть много NIB файлов с еще большим количеством текстовых полей, это некрасиво хак может помочь:
#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