1

我有一个 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。

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

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

[[tempoButton cell] setFormatter:tempoFormatter];

(tempoButton 是一个连接到 NSPopUpButton 的 IBOutlet)

我想知道使用 NSNumberFormatter 是否是我所需要的?如果是这样,我做错了什么?我已通读 Data Formatting Programming Guide;这看起来很简单,但我觉得我错过了一些东西。

提前致谢。

4

1 回答 1

2

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

如果你绑定到“Selected Value”,你会得到一个 NSString。

如果您绑定到“选定对象”,您将获得由选择表示的对象,在您的情况下,它是一个 NSNumber。

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

于 2010-01-10T20:10:52.140 回答