質問: コアデータとバインディングを使用する場合、NSPopUpButtonはどのようにデータで埋められますか? コアデータとカカオバインディングを使用しているときに、 `NSPopUpButton` がどのようにデータで満たされているかを調べようとしています。その理由は、 `NSPopUpButton` をサブクラス化し、メニュー項目の挿入を操作して画像を追加したいからです。 私はサブクラス化した `- (void)addItemWithTitle:(NSString *)title` 、 `- (void)addItemsWithTitles:(NSArray *)itemTitles` および `- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index` どのメソッドが呼び出されたかを見るだけですが、アプリケーションの開始時にはそれらのメソッドはありません。 誰が正しい方法が分かっていますか?アイテムの挿入に影響を与える他のメソッドがリストされていないので、クラス参照のdocはあまり役に立ちません(または使用方法を知りませんでした)。 前もって感謝します、 トーマス
回答: これはかなり古い質問ですが、手動で `NSPopUpButton` と `NSTreeController` のバインドを手動で実装した後の答えがあります。 Githubの NSTreePopUpButton プロジェクトをチェックアウトして、どのように行っているか確認できます `NSPopUpButton` も同様です。 私が `NSPopUpButton` を上書きすることができる限り ``` func bind(binding: String, toObject observable: AnyObject, withKeyPath keyPath: String, options: [NSObject : AnyObject]?) ``` `binding` が `NSContentBinding` の場合、クラスはオブザーバとしてオブジェクトとキーパスのように自身を追加します。 ``` observable.addObserver(self, forKeyPath: keyPath, options:..., context:...) ``` キーパスの値がメソッドを変更すると ``` func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer) ``` `NSPopUpButton` で呼び出されます。このメソッドを実装すると、完全な新しい `NSMenu` インスタンスが更新または作成され、[メニュー](https://developer.apple.com/library/mac/documentation/Cocoa/Referenceに割り当てられます/ApplicationKit/Classes/NSPopUpButton_Class/index.html#//apple_ref/occ/instp/NSPopUpButton/menu )プロパティを使用します。