メモ:NSAlert の罠

さて、話はがらりと変わって NSAlert 。NSAlert は、どのボタンがクリックされたかを以下の定数で返してくれることになっている:

  • NSAlertFirstButtonReturn(一番右側のボタンがクリックされた)
  • NSAlertSecondButtonReturn(右から二番目のボタンがクリックされた)
  • NSAlertThirdButtonReturn(右から三番目のボタンがクリックされた)

しかし、NSAlert のメソッド +[NSAlert alertWithMessageText:defaultButton:alternateButton:otherButton:informativeTextWithFormat:] を使用してアラートを表示した場合、返ってくる値は以前の NSRunAlertPanel() や NSBeginAlertSheet() などと同じ、

  • NSAlertDefaultReturn
  • NSAlertAlternateReturn
  • NSAlertOtherReturn

なので注意が必要だ。うっかりしていると、アラートが閉じられなくなったり、成すべきことを行えなくなってしまう*1
なお、http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSAlert.htmlでは、これから初めてアラートを表示するコードを書くなら、 +[NSAlert alertWithMessageText:defaultButton:alternateButton:otherButton:informativeTextWithFormat:] を使わず、こつこつと NSAlert を alloc して init して、各種属性をセットして、表示する方がオススメとされている。このメソッドは、NSBeginAlertSheet() や NSRunAlertPanel() を使って表示しているアラートを、手っ取り早く NSAlert に置き換えたい場合のために用意されている*2のである。


ちなみに tsawada2 はあの薄紫なヘルプボタンが大好きで、BathyScaphe のアラートは将来的に全部 NSAlert にして、ヘルプボタンを付けたいと思っているらしいけれども、それはまた、別のお話*3。。。

*1:…つまり、うっかりやっちまった、ということだ!

*2:NSAlert に置き換えることで、ボタンにショートカットを付けたり、アラートにヘルプボタンを付けたり、アラートのアイコンを好きに設定できるなどのメリットがある

*3:そして、期末試験を乗り切ってから取りかかるお話!