以统一的方式从NSTextField,NSComboBox获取值?

时间:2012-06-10 00:19:41

标签: macos cocoa

我将以下方法设置为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

如果intfloat,我如何以统一的方式(即作为对象)从控件中获取值?我在我的模型上使用的KVC setValue:forKey:方法应该能够推导出值对象的实际类型(即本例中NSNumber的种类)就好了,对吗?

或者这根本不可能吗? (我知道我可能会使用绑定将UI控件绑定到模型的值字段,但这不是我想要做的。)

1 个答案:

答案 0 :(得分:1)

由于NSTextFieldNSComboBox都是NSControl的子类,因此您应该能够使用-(id)objectValue以统一的方式获取控件的值(或选定的值)