Edited at

Binding を設定したメニューアイテムに対して validateMenuItem: が呼ばれない

More than 5 years have passed since last update.

Cocoa のメニューには NSMenuItemValidation プロトコルというメニュー項目の有効・無効を動的に切り替えられる機構がある。ある NSMenuItemtarget に設定されたオブジェクトが -(BOOL)validateMenuItem:(NSMenuItem *) を実装しているとき、このメニューアイテムが表示される直前に、メニューアイテム自身を引数としてこのメソッドが呼ばれる。メソッドが真を返せばメニューアイテムが有効になり、偽を返せば無効になる。

ところが、 Interface Builder でメニューアイテムに binding を設定すると -validateMenuItem: が呼ばれなくなるようだ。そのようなメニューアイテムの有効・無効を切り替えるには binding またはコードで enabled プロパティを操作すればよい。ただし、そのメニューアイテムを含むメニューの autoenablesItems が真ならば、メニューアイテムの enabled にセットした値が上書きされるかもしれないことに注意。