2

次の実装で呼び出されるNSWindowControllerサブクラスが_PreferencesWindowControllerあります-

@synthesize window;

- (id)init {

 self = [super initWithWindowNibName:@"PreferencesWindow"];
 if (!self) return nil;

 return self;
}

_PreferencesWindowControllerそして、私は次のコードを使用してウィンドウを表示しようとしました-

_preferencesWindowController = [[_PreferencesWindowController alloc] init];
[_preferencesWindowController showWindow:nil];

それは何もしません、そして私がチェックしたの_preferencesWindowController.windownilデバッガーからのものです。

ただし、ウィンドウを呼び出すloadView_preferencesWindowController、ロードして表示できます。_preferencesWindowController.windowもはやゼロ値ではありません-

[_preferencesWindowController loadWindow];

NSWindowControllerに関するAppleのドキュメントを調べたところ、loadWindow「直接呼び出すことは絶対にしないでください」と具体的に記載されており、代わりshowWindow:に使用する必要があります。私が見ている上記の振る舞いをもたらしたのは、私が何を見逃したのだろうかと思います。

4

1 に答える 1

3

OKNSWindowControllerヘッダーファイルを見てこれを解決しました。

問題は_PreferencesWindowControllerのヘッダーファイルにあります-

@interface _PreferencesWindowController : NSWindowController <NSToolbarDelegate> {

    NSWindow *window;

}

@property (assign) IBOutlet NSWindow *window;

@end

@property宣言を削除し、ivarをに変更するNSWindow *windowことIBOutlet NSWindow *windowで、showWindow:メソッドがグリッチなしで機能するようになりました。

プロパティ宣言により、の実装のshowWindow:メソッドで未定義の動作が発生した必要があります。NSWindowController

于 2010-08-22T02:29:48.537 に答える