0

この特定のキーの監視を設定しようとしても、何も起こりません。これが私の言いたいことです。

NSTableViewを備えた標準のCocoaアプリケーションがあり、選択されたセルに基づいて画像ビューに表示される画像を変更する方法を理解しました。

今、私は選択されたインデックスによってボタンを無効/有効にする方法を理解しようとしています。これが意味するのは、ウィンドウにボタンがあり、特定のインデックスで無効になっているということです。

SomeClassのinitメソッド

-(id)init {
    if (self=[super init]) {
        [arrayController addObserver:self forKeyPath:@"selectionIndex" options:NSKeyValueObservingOptionNew context:NULL];
    }
}

ただし、observeValueForKeyPath:メソッドを実装すると、新しいインデックスを選択するときに変更が取得されません。実際のところ、ログに記録しようとすると、アウトレットは(null)と表示されます。ただし、AppDelegateにオブザーバーを追加すると、AppDelegate(オブザーバーとして指定されている場合)が変更を取得します。

私の一般的なSomeClassオブジェクトがそうしない理由はありますか?別の方法で行う必要がありますか?

ノート:

SomeClassをNSWindowとしてサブクラス化し、ウィンドウの所有者をSomeClassにし、awakeFromNibにオブザーバーを設定しようとしましたが、これは機能しますが、これを行うには悪い方法のようです。

4

1 に答える 1

4

このinit方法は、コンセントが接続される前のプロセスの早い段階で発生します (私はそう思います)。コードを入れるawakeFromNibと正しく動作します。これは、NSObjectクラス リファレンスの Apple のドキュメントからのものです。

nib 読み込みインフラストラクチャawakeFromNib は、nib アーカイブから再作成された各オブジェクトにメッセージを送信しますが、アーカイブ内のすべてのオブジェクトが読み込まれて初期化された後でのみです。オブジェクトがawakeFromNibメッセージを受信すると、すべてのアウトレットとアクション接続がすでに確立されていることが保証されます。

于 2012-08-07T02:39:20.233 に答える