私はいくつかの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]値]でコントローラからオブジェクトを取得できます。キーと値のペアを持つ選択されたオブジェクトの配列に入っています。