我有一个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甚至是我需要的?如果是这样,我做错了什么?我已经阅读了数据格式编程指南;它看起来非常简单,但我觉得我错过了一些东西。
提前致谢。
答案 0 :(得分:2)
这取决于您使用哪种绑定来获取NSPopupButton的选定值。
如果您绑定到“选定值”,您将获得一个NSString。
如果您绑定到“选定对象”,您将获得选择所代表的对象,在您的情况下将是NSNumber。
否则,您可以在绑定中添加NSValueTransformer,将所选值转换为您期望的对象。