コアデータとバインディングを使用する場合、NSPopUpButtonはどのようにデータで埋められますか?

コアデータとカカオバインディングを使用しているときに、 NSPopUpButton がどのようにデータで満たされているかを調べようとしています。その理由は、 NSPopUpButton をサブクラス化し、メニュー項目の挿入を操作して画像を追加したいからです。

私はサブクラス化した - (void)addItemWithTitle:(NSString *)title - (void)addItemsWithTitles:(NSArray *)itemTitles および - (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index どのメソッドが呼び出されたかを見るだけですが、アプリケーションの開始時にはそれらのメソッドはありません。

誰が正しい方法が分かっていますか?アイテムの挿入に影響を与える他のメソッドがリストされていないので、クラス参照のdocはあまり役に立ちません(または使用方法を知りませんでした)。

前もって感謝します、 トーマス

0

2 答え

これは、NSPopUpButtonにCoreDataのデータを入力する方法です。

たとえば、CoreDataエンティティ "Person"にNSStringプロパティ "name"が設定されているとします。

最初にInterfaceBuilderでNSArrayControllerを作成し、そのモードを "Entity Name"に設定し、 "Person"という名前を入力して "Prepare Content"をチェックします。

今度はあなたのインターフェイスに新しいNSPopUpBottonを置き、それを "Content Values"をArrayControllerにバインドします。コントローラキーは「配置されたオブジェクト」とモデルキーパス「名前」である必要があります。

(これでデータを追加するだけで済みます)

NSPopUpButtonにはNSMenuItemsが含まれています。 NSMenuItemsはイメージを持つことができます。したがって、サブクラス化する必要はありません。

NSMenuItemsで配列を作成することもできます。NSMenuItemsにはイメージがあり、配列をNSPopUpButtonの "Content"にバインドします。

1
追加された
こんにちはダニエル!ありがとう、それは私が探しているものではありません。私は今までバインディングとコアデータを理解しており、コントロールをバインドすることができます。コアデータ/バインディングによってデータが埋め込まれたときに NSPopUpButton メソッドが呼び出されることを知りたいので、実装を自分のニーズに変えることができます。
追加された 著者 Dark.Rider,
もう一度こんにちはダニエル。あなたの投稿の第2部分に。私はそれに名前とビットマップを持つコアデータエンティティを持っています。動作するのは、名前が NSPopUpButton にバインドされていることです。達成したいのは、ビットマップと名前が表示されることです。私はInterface Builderでそれを得る方法を見つけませんでした。この計画は、エンティティに名前のバインディングをそのまま残し、コントロールにデータが与えられたときに画像がプログラムで追加されるように NSPopUpButton をサブクラス化することです。私はそれが今より明らかであることを願っています。
追加された 著者 Dark.Rider,

これはかなり古い質問ですが、手動で 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 インスタンスが更新または作成され、メニュープロパティを使用します。

0
追加された