Mac用USBデバイス-104 テストプロジェクトの動作 [Mac用USBデバイス工作]
前回まででNSTreeControllerのサブクラスでCocoaバインディングを使って異なるクラスのインスタンスを追加するためのテストアプリを作った。今日でひとまとめになる。後でも書くけどテストアプリのプロジェクトファイルを置いておく。NSTreeControllerのサブクラス化のExample Codeとも見ることができるのでCocoaバインディングに突っ込みたい人はビルドしてみて欲しい。僕は今回のテストプロジェクトでCocoaバインディングに対する理解がちょっと深まった気がする。
ポップアップのそれぞれのメニューアイテムを図-14のようにEnabledを設定する。 もう一つのメニューアイテムも同様にcanAddOtherに設定する。
実際に子要素を追加するのはこれまで通りのアクションとしてTreeControllerにaddChild:を投げればいい。addChild:にsenderとしてメニューアイテムが渡されるので、そこから作るべきクラスを取り出すことになる。
起動すると、NSOutlineViewにはRoot Nodeがひとつ表示される。ポップアップ(プルダウン)からExtra、あるいはOtherを選ぶと選んだクラスが子要素に追加される。追加された要素を選択すると、それがExtraならOtherだけ、OtherではExtraだけがポップアップからは選択できるようになる。図-15は動かしているところ。 テストプロジェクトをここに置いた。sdkはNSTreeControllerを使っているので10.4、従ってgccは4.0を使っている。興味ある人はビルドして動作させてみてほしい。
なお、アプリウィンドウにはRemoveボタンも付けてある。トップレベルはリムーブできないようになっている。そのへんの細工もソースを見てもらうとわかる。また、アプリを終了するとrootNodeの中身を書き出すようになっているので、Outline Viewから名前を書き換えるとちゃんとcontentの内容が書き変わっていることが確認できる。Cocoa バインディングを使えばかなりの部分が簡単になることがわかるが、Interface Builderでの設定と、書いたコードとの同期をとっておかないとちゃんと動かない。Interface Builderでの設定の変更が副作用になったり、コード側でオブジェクトやメソッドの名前を変えたときにInterface Builderでの設定が無効になったりするのはしょうがないんだけど、混乱の元になる。
次回はテストアプリを通じてCocoaバインディングについて考えたことをまとめる。
5.3.13 ポップアップボタンのバインディングとアクション
NSPopupButtonはTypeをPull Downに設定しておくと、選択したあと先頭のメニューアイテムに戻るようになる。この動作の方が今回の場合望ましい。ポップアップのそれぞれのメニューアイテムを図-14のようにEnabledを設定する。 もう一つのメニューアイテムも同様にcanAddOtherに設定する。
実際に子要素を追加するのはこれまで通りのアクションとしてTreeControllerにaddChild:を投げればいい。addChild:にsenderとしてメニューアイテムが渡されるので、そこから作るべきクラスを取り出すことになる。
5.3.14 実際の動作
動かしてみて動作を確認する。起動すると、NSOutlineViewにはRoot Nodeがひとつ表示される。ポップアップ(プルダウン)からExtra、あるいはOtherを選ぶと選んだクラスが子要素に追加される。追加された要素を選択すると、それがExtraならOtherだけ、OtherではExtraだけがポップアップからは選択できるようになる。図-15は動かしているところ。 テストプロジェクトをここに置いた。sdkはNSTreeControllerを使っているので10.4、従ってgccは4.0を使っている。興味ある人はビルドして動作させてみてほしい。
なお、アプリウィンドウにはRemoveボタンも付けてある。トップレベルはリムーブできないようになっている。そのへんの細工もソースを見てもらうとわかる。また、アプリを終了するとrootNodeの中身を書き出すようになっているので、Outline Viewから名前を書き換えるとちゃんとcontentの内容が書き変わっていることが確認できる。Cocoa バインディングを使えばかなりの部分が簡単になることがわかるが、Interface Builderでの設定と、書いたコードとの同期をとっておかないとちゃんと動かない。Interface Builderでの設定の変更が副作用になったり、コード側でオブジェクトやメソッドの名前を変えたときにInterface Builderでの設定が無効になったりするのはしょうがないんだけど、混乱の元になる。
次回はテストアプリを通じてCocoaバインディングについて考えたことをまとめる。
2010-05-26 21:30
nice!(0)
コメント(0)
トラックバック(0)
コメント 0