NSPopupButton のバインドに関する質問が数十あるように思われるので、これに苦労することについては少し気分が良くなりましたが、どれも私の問題を解決していないようです。
別のクラスと 1 対多の関係を持つ NSManagedObject サブクラスがあります。Foo に Bar との関係があるとします。つまり、Foo には Bar の NSSet であるプロパティがあります。
NSArrayController を作成し、その contentSet を Foo オブジェクトと「bars」キー パスにバインドしました。
次に、NSPopupButton のコンテンツをアレイ コントローラーの ArrangeObjects にバインドし、その contentValues をアレイ コントローラーの ArrangeObject (コントローラー キー) と「名前」 (表示する Bar のプロパティ) にバインドします。
これまでのところすべて正常に動作していますが、NSPopupButton の選択したオブジェクトを配列コントローラーの選択にバインドしようとすると、NSPopupButton に「<_NSArrayControllerObjectProxy」と表示されます。また、このバインディングのキーパスとして「名前」を追加しようとしましたが、これにより NSPopupButton に名前が正しく表示されますが、ポップアップで選択を変更すると、アプリは例外をスローしました:
Unacceptable type of value for attribute: property = "name"; desired type = NSString; given type = Bar;
ポップアップが「名前」の文字列値を選択されたバーとして設定しようとしているので、これは理にかなっていると思います。したがって、選択したオブジェクトと選択した値をバインドする必要があると思いますが、選択したオブジェクトが設定されている場合、XIB は選択した値を無効にします。
代わりに選択した値をバインドしようとしましたが、この半分は機能します (アレイコントローラーの選択は変更されます) が、ポップアップメニューのオプションは変更されず、選択解除されたものを表示し、新しく選択したものを非表示にします)。
このすべてに失敗したので、ここで記事を読みました: http://blog.chrisblunt.com/cocoa-bindings-and-nspopupbutton/ NSPopupButton 「NSPopUpButton はユーザーの選択を記録しません」と述べ、代わりに選択を別の場所に保存します。アレイコントローラー。ウィンドウに currentBar プロパティを配置して、代わりにそれに選択をバインドしようとしましたが、 currentBar が変更されていることがわかりますが (別のビューもバインドされているため)、ポップアップ ボタンのラベルは変更されません。
誰かが私を助けることができれば、私は非常に感謝しています.