NSComboBox
1つと2つののアクションとして次のメソッドを設定しています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コントロールをモデルの値フィールドにバインドできることはわかっていますが、それは私がやりたいことではありません。)