2

シンプルな Cocoa アプリがあります。2 つのウィンドウがあり、それぞれ別の xib ファイルにあります。

  • MainMenu.xib
  • セカンダリウィンドウ.xib

MainMenu.xib のウィンドウへの参照を持つ AppDelegate クラスがあります。SecondaryWindow.xib のウィンドウへの参照を持たせようとしています。これを行う方法について混乱しています。私はそのようにアウトレットを作りました:

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSWindow *secondaryWindow;

@end

実装は次のとおりです。

@implementation AppDelegate

@synthesize window = _window;
@synthesize secondaryWindow = _secondaryWindow;


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [NSBundle loadNibNamed:@"SecondaryWindow" owner:self];
    NSLog(@"_window = %@", _window);
    NSLog(@"_secondaryWindow = %@", _secondaryWindow);
}

@end

_secondaryWindow は常に (null)

2 番目のウィンドウの SecondaryWindow.xib 接続から AppDelegate のアウトレットにアウトレットを追加しました。接続を完了するには、SecondaryWindow.xib で他に何をする必要がありますか?

編集: [NSBundle loadNibNamed...] を追加

4

2 に答える 2

1

セカンダリ ウィンドウの .xib でファイルの所有者のタイプをアプリ デリゲートのタイプに設定しましたか? そして、その .xib のウィンドウsecondaryWindowを File's Owner のアウトレットに接続しましたか?

これらのことを行い、.xib がプロジェクトに適切に含まれていて、+loadNibNamed:owner:メッセージでファイルの名前を正しく指定していれば、プロパティに値が設定されてsecondaryWindowいるはずです。

于 2012-07-24T15:00:44.053 に答える
1

ロードする必要があります... デフォルトでは、MainWindow.xib はフレームワークによってロードされ、アプリ デリゲートの独自のインスタンスが作成されます。アプリ デリゲートから 2 番目のウィンドウをロードする必要があります (試してみてください[NSBundle laodNibNamed:@"SecondaryWindow" owner:self]。これを行うと、ファイルの所有者がアプリケーション デリゲートになります。インターフェイス ビルダーでファイルの所有者のクラスを変更して、それを反映し、接続を確立します)。

于 2012-07-24T12:56:05.550 に答える