itok's Lab

昔の開発ネタを記録として残してます

NSMenuの表示直前に処理をする

メニューの中身がなにか別のデータに依存していて、そのデータの変更が結構頻繁だったりして、データ変更があるたびにメニューの中身を書き換えなくちゃいけなくて、それだったらメニューを表示する時(正確には表示する直前)に毎回データの中身をチェックしたほうがいいんじゃないの?っていう場合に便利なデリゲートがあります。

// NSMenu
-(void) menuNeedsUpdate:(NSMenu*)menu;

デリゲートなので、事前にそのメニューに対してデリゲートを指定しておけば、表示するタイミングでこのメソッドが呼ばれます。なんで、そこでメニューの書き換えなんかをしてしまえば、常に最新の状態に保たれる、というわけ。

例えば、1つのメニューリソースを2ヶ所以上(メインメニューとコンテキストメニュー、とか)の場所でメニューとして表示させたい時なんかにも便利。