1

xcode のインターフェイス ビルダーでココア アプリのインターフェイスを作成しようとしています。Interface builder で作成したウィンドウの 1 つのビューは、別のビューからのデータに依存するため、データを渡す必要があるクラスからこのビューにメッセージを送る必要があります。しかし、nib ファイルの所有者からこのビュー オブジェクトへの参照を取得する方法が見つからないようです。私が使用しているコードは大まかに次のとおりです。

controller = [[NSWindowController alloc] initWithWindowNibName:@"Somenibname"];
[[controller window] display];
theOtherView = [[[[controller window] contentView] subviews] objectAtIndex:1];
[theOtherView setObjectwhichneedstobemessaged:self];
[theOtherView sendAMessage:self];

このコードが含まれるオブジェクトは、メッセージを受信しません。最初は実際には contentview が Interface Builder に表示されるビューだと思っていたので、このように参照を取得しようとしました

theOtherView = [[[コントローラー ウィンドウ] contentView]];

しかし、それもうまくいきませんでした。読んでくれてありがとう。

4

2 に答える 2

1

View-Controller構造がnibファイルでどのように機能するかをよりよく理解する必要があるように思われます。コードや詳細がないと、何をしようとしているのかを正確に知ることは困難ですが、問題をすばやく解決するには、 NSNotificationは、他のビューを見つけて、コールチェーンを介してメッセージを送信しようとする代わりに使用します。

受信ビューからの通知を処理し、開始ビューから通知を送信するように登録できます(2つの方法が必要な場合はその逆)。

于 2012-07-10T03:45:35.443 に答える
1

読んでIBOutlet、Interface Builder から直接必要なビューをリンクすることを検討してください。

たとえば、NSWindowControllerサブクラスには次のものがあります。

@interface MyWindowController : NSWindowController
{
  /* can also use more specific classes if you need them, e.g. NSButton if it's really an NSButton */
  IBOutlet NSView* firstViewIWant;
  IBOutlet NSView* secondViewIWant;
}
  . . .
@end

実装には次のものが含まれる場合があります。

- (void)
windowDidLoad
{
  [super windowDidLoad];
  /* make sure the views were connected properly */
  assert(nil != firstViewIWant);
  assert(nil != secondViewIWant);
    . . .
}

次に、Interface Builder で、これらのアウトレットを「ファイルの所有者」から必要な正確なビューに接続します。

于 2012-07-10T04:13:02.917 に答える