我有一个名为_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.window
是nil
。
但是,如果我在loadView
上拨打_preferencesWindowController
,则可以加载该窗口并且该窗口可见; _preferencesWindowController.window
不再是零值 -
[_preferencesWindowController loadWindow];
我查看了关于NSWindowController的Apple文档,它特别说“你永远不应该直接调用loadWindow
”,而应该使用showWindow:
。我想知道我可能错过了什么导致了我上面提到的上述行为。
答案 0 :(得分:2)
好的,我通过查看NSWindowController
头文件解决了这个问题。
问题出现在_PreferencesWindowController的头文件中 -
@interface _PreferencesWindowController : NSWindowController <NSToolbarDelegate> {
NSWindow *window;
}
@property (assign) IBOutlet NSWindow *window;
@end
删除@property声明并将NSWindow *window
ivar更改为IBOutlet NSWindow *window
,showWindow:
方法现在可以正常运行。
属性声明必须在showWindow:
的实现中NSWindowController
方法中导致未定义的行为。