« Safari3 の WebKit のインストールについての改善案を勝手に考える | トップページ | merge.rb で ユニバーサルバイナリ »

2007.07.18

ADCサンプル BoundButton

先月公開されたサンプルの Bound Button をちょっと見てみる。名前からだとわかりにくいけれど、Cocoa Bindings でアクションまわりのバインディングについてのサンプル。

このサンプルアプリケーションは

  1. ピザかカルゾーネのどちらにするかを選ぶ
  2. トッピングを選ぶ(複数選択可)
  3. Place your order ボタンを押すと、選択内容と金額が表示される

という動作をする。

ここでの特徴はボタンのバインディング Action Invocation を使っていること。その設定内容を見てみると、次のようになっている。

  • target: OrderController.self
  • argument: Entrees.selection
  • argument2: Toppings.selectedObjects
  • Selector Name: "orderEntree:withToppings:"

一般的なボタンのアクションでは -(IBAction)doAction:(id)sender という形式のアクションメソッドを呼び出すけれど、ここでは

 25 @interface OrderController : NSObject
 26 +--  6 lines: {-------------------------------------------------------------
 32 
 33 - (void)orderEntree:(id)selectedEntree withToppings:(NSArray *)selectedToppings;

と、2つの引数を受け取るメソッドがボタンの動作になっている。バインディングで直接データを引数として設定できるわけ。これはちょっとスゴイかも、、、と思ったけれど、意外と使い道ないな。

アクションのターゲットと操作に利用するオブジェクトを独立させたいときってあまりないんだよな。どうせアウトレットやなんやで参照できるし。

そういう理由もあってか、この機能を利用できるクラスはあまり多くない。

 % pwd
 /Developer/ADC Reference Library/documentation/Cocoa/Reference
 % grep -l 'Action Invocation' CocoaBindingsRef/BindingsText/*.html
 CocoaBindingsRef/BindingsText/NSButton.html
 CocoaBindingsRef/BindingsText/NSButtonCell.html
 CocoaBindingsRef/BindingsText/NSOutlineView.html
 CocoaBindingsRef/BindingsText/NSTableView.html

こんだけ。

|

« Safari3 の WebKit のインストールについての改善案を勝手に考える | トップページ | merge.rb で ユニバーサルバイナリ »