NSFormatter与NSPopUpButton一起使用

时间:2010-01-10 19:24:43

标签: cocoa formatting interface-builder cocoa-bindings nspopupbutton

我有一个NSPopUpButton,其内容值绑定到NSNumber的NSArray。 NSPopUpButton在其弹出菜单中正确显示数字数组。但是,当我更改所选值时,我会收到一条消息:

HIToolbox: ignoring exception 'Unacceptable type of value for attribute: property = "tempo"; desired type = NSNumber; given type = NSCFString; value = 106.' that raised inside Carbon event dispatch

显然,这是因为所选值绑定到的对象期望NSNumber,而NSPopUpButton正在给它一个NSString。通过其他帖子,我认为我需要的是NSNumberFormatter。

但是,我尝试使用NSNumberFormatter,无论是通过Interface Builder还是以编程方式,但结果都没有改变。作为参考,这是我在尝试以编程方式设置NSPopUpButton的格式化程序时使用的代码:

tempoFormatter = [[NSNumberFormatter alloc] init];
[tempoFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[tempoFormatter setFormat:@"### bpm"];

[[tempoButton cell] setFormatter:tempoFormatter];

(tempoButton是连接到NSPopUpButton的IBOutlet)

我想知道是否使用NSNumberFormatter甚至是我需要的?如果是这样,我做错了什么?我已经阅读了数据格式编程指南;它看起来非常简单,但我觉得我错过了一些东西。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这取决于您使用哪种绑定来获取NSPopupButton的选定值。

如果您绑定到“选定值”,您将获得一个NSString。

如果您绑定到“选定对象”,您将获得选择所代表的对象,在您的情况下将是NSNumber。

否则,您可以在绑定中添加NSValueTransformer,将所选值转换为您期望的对象。