NSTextField使用NSNumberFormatter清除其objectValue,如何防止

时间:2016-03-02 20:04:13

标签: cocoa nstextfield nsnumberformatter

我在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";
}

(我删除了一些相同的重复,它似乎每个几轮(我只用一个文本字段进行测试))。 字符串对象当然是格式化字符串的属性版本。

0 个答案:

没有答案