NSWindowController:loadWindow从nib加载窗口但showWindow:什么都不做

时间:2010-08-22 01:30:47

标签: objective-c cocoa nib nswindowcontroller

我有一个名为_PreferencesWindowController的NSWindowController子类,其实现如下 -

@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:。我想知道我可能错过了什么导致了我上面提到的上述行为。

1 个答案:

答案 0 :(得分:2)

好的,我通过查看NSWindowController头文件解决了这个问题。

问题出现在_PreferencesWindowController的头文件中 -

@interface _PreferencesWindowController : NSWindowController <NSToolbarDelegate> {

    NSWindow *window;

}

@property (assign) IBOutlet NSWindow *window;

@end

删除@property声明并将NSWindow *window ivar更改为IBOutlet NSWindow *windowshowWindow:方法现在可以正常运行。

属性声明必须在showWindow:的实现中NSWindowController方法中导致未定义的行为。