2009-03-24 3 views
4

私はいくつかのMacOSプログラミングを試していて、バインディングがNSPopupButtonとどのように機能するかを理解するのに少し問題があります。私はNSDictionaryControllerにバインドすることに興味があります(中間のNSArrayControllerが必要ではないと思っていますが、これが最善の方法であれば私はそれを公開しています)。NSDictionaryControllerにNSPopupButtonをバインドする

NSMutableDictionaryである 'species'というプロパティを持つ 'db'というプロパティを持つコントローラオブジェクトを作成しました。 「種」辞書には、キーのIDと値の種オブジェクトがあります。 Speciesオブジェクトにはdescriptionプロパティがあります。 InterfaceBuilderでは、MyController、NSDictionaryController、およびNSPopupButtonを作成しました。ポップアップにSpecies.descriptionsを設定したいと思います。選択すると、対応するIDにアクセスする必要があります。

モデルキーパス 'db.species'を使用して 'コンテンツディクショナリ'をMyControllerにバインドするようにNSDictionaryControllerをセットアップしました。 NSPopupButtonでは、これまでコントローラキー 'arrangedObjects'とModel Key Pathを 'value.description'に設定してNSDictionaryControllerに 'Content Values'をバインドしました。

これは、リストにデータが入力されているように見えます。私の主な質問は、選択を繋ぐ最良の方法は何かです。理想的には、選択にNSDictionaryControllerを使用してNSDictionaryControllerを使用して選択項目にアクセスできるようにしたいと思います。これの1つの理由は、NSDictionaryControllerに他のコントロールをワイヤリングして現在の選択を見ることができるようにすることです。そうでない場合は、MyControllerなどのプロパティに接続する必要がありますか?ベストプラクティスを探しているだけです。私はInterface Builderの仕組みを通して、モデルとコントローラの設計を別のビューで別のアプリケーションで簡単に再利用できるようにしたいと思います。

NSPopupButton:ガイダンスとしてブライアンの答えを使用して

更新 バインドコンテンツNSDictionaryController-> arrangedObjects-> value.descriptionへ

バインドコンテンツオブジェクトへのNSDictionaryController-> arrangedObjects->キー

選択したインデックスをNSDictionaryController-> selectionIndexにバインド

バインドNSDictionaryController-> db.spec ies

すべてがうまくいくようです。私は[[[コントローラselectedObjects] lastObject]値]でコントローラからオブジェクトを取得できます。キーと値のペアを持つ選択されたオブジェクトの配列に入っています。

答えて

3

私はこれをNSDictionaryControllerで試したことはありませんが、dictコントローラの "arrangedObjects.key"とselectedObjectバインディングをdictコントローラの "selection"キーにバインドしたいと思います。 contentObjectsバインディングは、IDを各メニュー項目によって表される基本オブジェクトとして指定します。ポップアップからアイテムが選択されると、selectedObjectバインディングは、そのメニュー項目に対応するIDをdictコントローラの選択として設定します。

1

私はSpecies.descriptionsをポップアップしたいと思います。選択すると、対応するIDにアクセスする必要があります。辞書コントローラのarrangedObjects.keyに辞書コントローラのarrangedObjects.value(-theポップアップボタンがあなたのためにそれを行いますdescriptionを含まない)とcontentObjects

バインドcontent

詳細については、NSPopUpButton in the Cocoa Bindings Referenceを参照してください。

(「NSArrayControllerインスタンス...」としてcontentが記載されています)ディクショナリコントローラはアレイコントローラなので、問題はないはずですが、コントローラのプロパティへのバインドは可能性があります。 )

関連する問題