我最近安裝了山獅,並注意到我現在有數據綁定的Mac OS X應用程序正在顯示一個int32 NSTableViewCell作爲x,xxx。NSTableViewCell顯示,爲int
IE:.storedata
文件顯示<attribute name="itemid" type="int32">2533</attribute>
,而項目在單元格中顯示爲2,533
。我無法弄清楚爲什麼它在山獅會做到這一點,但沒有在獅子山做。
如何獲取細胞,以顯示而不是作爲2533
2,533
我最近安裝了山獅,並注意到我現在有數據綁定的Mac OS X應用程序正在顯示一個int32 NSTableViewCell作爲x,xxx。NSTableViewCell顯示,爲int
IE:.storedata
文件顯示<attribute name="itemid" type="int32">2533</attribute>
,而項目在單元格中顯示爲2,533
。我無法弄清楚爲什麼它在山獅會做到這一點,但沒有在獅子山做。
如何獲取細胞,以顯示而不是作爲2533
2,533
我結束了添加值轉換
@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
這在一定程度上記錄在10.8版本說明:
的NSString定域格式化
在10.8中,在與10.8 SDK鏈接的應用程序中,-localizedStringWithFormat:和-initWithForm at:locale :(和朋友)當提供非零語言環境時,現在將執行數字的本地化格式化。以前這些調用已經做了小數點處理;所以在某些語言環境中,逗號將用於小數點分隔符。這種新的行爲建立在此基礎上,使用本地化數字以及數千個分隔符和正確的符號位置。
但我仍然認爲它是一個錯誤(並提交),它有很多問題(與傳統的UI搞砸,偶爾在手工編輯時出現錯誤的行爲等)。
對於新的用戶界面,您可能最適合將數字格式化程序添加到您的筆尖,用於顯示數字的所有文本字段。
如果(像我的情況),你有更多的文本字段許多筆尖文件,這個醜陋的黑客可能會有所幫助:
#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