我将以下方法设置为NSComboBox
和两个NSTextField
的操作:
- (IBAction)valueChanged:(id)sender
{
if (sender == comboBox) {
[myModel setFoo1:[comboBox intValue]];
} else if (sender == intTextField) {
[myModel setFoo2:[intTextField intValue]];
} else if (sender == floatTextField) {
[myModel setFoo3:[floatTextField floatValue]];
}
}
我想知道我是否可以将这种方法变成这样的方法,以提高可维护性:
- (IBAction)valueChanged:(id)sender
{
[myModel setValue:[sender value] forKey:[sender identifier]];
}
不幸的是,它并不像那样。我收到以下错误:
[NSComboBox value]: unrecognized selector sent to instance 0x7fed42029430
如果int
或float
,我如何以统一的方式(即作为对象)从控件中获取值?我在我的模型上使用的KVC setValue:forKey:
方法应该能够推导出值对象的实际类型(即本例中NSNumber
的种类)就好了,对吗?
或者这根本不可能吗? (我知道我可能会使用绑定将UI控件绑定到模型的值字段,但这不是我想要做的。)
答案 0 :(得分:1)
由于NSTextField
和NSComboBox
都是NSControl
的子类,因此您应该能够使用-(id)objectValue
以统一的方式获取控件的值(或选定的值)