2013-06-18 3 views
1

Недавно я установил Mountain Lion и заметил, что мое приложение Mac OS X с привязкой данных теперь показывает int32 NSTableViewCell как x, xxx.NSTableViewCell показывается, для int

IE: Файл .storedata показывает <attribute name="itemid" type="int32">2533</attribute>, пока элемент отображается в ячейке как 2,533. Я не могу понять, почему это происходит в Горном Льве, но не в Лионе.

Как получить ячейку, чтобы показать, как 2533 вместо 2,533

enter image description here

ответ

1

Я в конечном итоге добавив Value Transformer

@implementation ItemIdValueTransformer 

+(Class)transformedValueClass 
{ 
    return [NSString class]; 
} 

+ (BOOL)allowsReverseTransformation 
{ 
    return NO; 
} 

- (id)transformedValue:(id)value 
{ 
    // Remove the ,'s from Mountain Lion and up 
    NSString *string = [NSString stringWithFormat:@"%li",(long)[value integerValue]]; 
    return string; 
} 

@end 
1

Это несколько задокументированы в примечаниях 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 
Смежные вопросы