2011-07-31 6 views
1

インスタンス変数int adventuresを含むAppControllerオブジェクトがあります。 これは、Interface Builderを介してラベルにバインドされています。あるオブジェクトのインスタンス変数を別のオブジェクトからどのように設定しますか?

また、PopUpWindowというNSWindowControllerのサブクラスもあります。 Enterボタンをクリックすると、ポップアップウィンドウのテキストフィールドの値は、AppControllerオブジェクトの変数adventuresを変更する必要があります。

@public@packageadventuresに使用しても、変更されません。私も使用しようとしています。PopUpWindowクラスからの使用を試みています。

[self willChangeValueForKey:@"adventures"]; 

それはクラス間でうまくいくのだろうか?これどうやってするの?

答えて

1

これは、AppControllerが名前付き通知のために登録することができるNSNotificationsのための良い場所です。私はあなたがAppControllerが通知を受け取ることができる何かが変更されたことをPopUpWindowがポストすることができます。もう一つの可能​​性は、PopUpWindowがAppControllerコントローラによって所有されていて、それがAppControllerをデリゲートとして持ち、そのデリゲートにメッセージを送ることができる場合です。コード

[self willChangeValueForKey:@"adventures"]; 

のあなたのラインは、それはあなたの中のAppControllerが起こっている示唆しているようだが、これこれが唯一のあなたのオブザーバーを教えてくれますので、何の使用はありません、それが変更されたことAppController.adventures、あなたはそれが他の方法で仕事をしたいです、私はあなたがPopUpWindow NSWindowControllerにメッセージを送信するクリックして入力ボタンをクリックasummingです。

+0

実際には、それは逆です。アプリケーションがウィンドウパネルを読み込むと、値を求めるテキストフィールドとボタンがポップアップします。この値はAppControllerの変数の冒険を設定するはずです。私はどのようにNSNotificationsを使用するかはわかりませんが、参考にして参考にしています。私はまた、PopUpWindowで変数numOfAdventuresを作成してラベルにバインドしようとしました。なぜなら、IBでオブジェクトを作成してPopUpWindow.numOfAdventuresにラベルをバインドしたときになぜ機能しなかったのですか? – sud0

+0

私は実際にウィンドウコントローラにAppControllerを割り当てて、 '[controller willChangeValueForKey:@" adventures "]; ' が自己ではありません。 – sud0

+0

NSWindowControllerのサブクラスを取り除き、 'IBOutlet NSWindow * popUpWindow;'を使って起動時に可視にし、Enterボタンをクリックすると閉じるようにして問題を解決しました。私がまだやり方を知らない唯一のことは、あなたがそれを必要とするときにそれを再び開くことです。私はNSWindowControllerの 'showWindow'メソッドに慣れています。 NSWindowで初めての作業です。 – sud0

関連する問題