NSMenuItemの更新のタイミング

NSMenuItemの更新のタイミング、[NSUserInterfaceValidations validateUserInterfaceItem:(id)anItem]が呼ばれるタイミングは、マウスがNSPopupMenuをクリックした時だった。

NSPopupMenuのmenuを表示する直前に更新処理をするのは、更新処理を必要最小限にする為と思われる。

理にかなっていると思うのだが、1点マズい事がある。

menuItemが全てDisableの場合は、NSPopupMenuもDisableにする必要がある。 しかし、更新のタイミングがNSPopupMenuをクリックする時だと奇妙な挙動が起る。

ユーザーが、NSPopupMenuをクリックした瞬間に、クリックしたNSPopupMenuがDisableに変わってしまう。(1/22追記 この認識自体が間違い)

解決方法は、更新処理をNSPopupMenuをクリックした時ではなく、NSWindowDidUpdateNotificationが飛んで来た時に更新すると良いと思われる。

コードは、色々と失敗したので挫折した。