我在NSTableCellView中使用NSTextField作为视图。我连接了一个NSNumberFormatter,以显示NSDecimalNumber对象的值。
我像这样设置对象:
cellView.textField.objectValue=[NSDecimalNumber notANumber];
文本字段首先从格式化程序请求此对象的字符串值。这很好用。
然后它请求格式化程序刚刚返回的字符串的字符串值!当然这会失败,文本字段会在下一次重绘时清除它的显示。
为什么文本字段将格式化程序中的字符串存储为其对象值?它不应该只用它来显示值吗?
我通过创建NSNumberFormatter的子类并将该子类连接为格式化程序来验证此行为:
@implementation CustomNumberFormatter
-(NSString *)stringForObjectValue:(id)obj {
NSString *result=[super stringForObjectValue:obj];
NSLog(@"string %@ for obj: %@",result,obj);
return result;
}
@end
然后记录:
string NaN for obj: NaN
string (null) for obj: NaN{
NSColor = "NSNamedColorSpace System alternateSelectedControlTextColor";
NSFont = "\".AppleSystemUIFont 13.00 pt. P [] (0x60000004cc90) fobj=0x100d1aa20, spc=3.59\"";
NSOriginalFont = "\".AppleSystemUIFont 13.00 pt. P [] (0x60000004cc90) fobj=0x100d1aa20, spc=3.59\"";
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 4, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 0, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
}
(我删除了一些相同的重复,它似乎每个几轮(我只用一个文本字段进行测试))。 字符串对象当然是格式化字符串的属性版本。