2012-06-10 26 views
0

我有以下方法設置爲NSComboBox和兩個NSTextField S的動作:以統一的方式從NSTextField,NSComboBox獲取值?

- (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的類型)就好了,對吧?

或者這是不可能的? (我知道我大概可以使用綁定綁定到該模型的值字段的用戶界面控件,但是這不是我想做的事情。)

+1

你嘗試過使用' - (id)objectValue'嗎? – sbooth

+0

不,我沒有。這似乎是訣竅。非常感謝!你介意讓你的評論成爲答案,以便我能接受它嗎? – tajmahal

+0

我繼續前進,並將其作爲答案。 – sbooth

回答

1

由於兩個NSTextFieldNSComboBoxNSControl子類,你應該能夠使用-(id)objectValue以統一的方式獲得控制的值(或選定的值)。

相關問題