我有一个NSWindowController子类,BBPreferencesWindowController
@implementation BBPreferencesWindowController
- (NSString *)windowNibName
{
return @"PreferencesWindow";
}
...
我的AppDelegate中的一个函数可以通过此控制器打开“PreferencesWindow.xib”中的窗口。
此函数从NSMenuItem调用,附加到系统菜单栏中NSStatusItem项下的NSMenu。
@property (strong) BBPreferencesWindowController *preferencesWindow;
...
- (void)openPreferences
{
if (self.preferencesWindow == nil)
{
self.preferencesWindow = [[BBPreferencesWindowController alloc] init];
}
[self.preferencesWindow showWindow:self];
NSLog(@"%@", self.preferencesWindow.window.isVisible ? @"YES" : @"NO");
}
第一次单击NSMenuItem时窗口显示正常(虽然NSLog行记录“NO”),但是当我关闭窗口然后再次通过单击NSMenuItem重新打开它时,窗口无法打开。
我错过了什么?
谢谢!
修改
BBPreferencesWindowController
没有自定义init方法。它确实有一个自定义awakeFromNib
(第一次调用)
- (void)awakeFromNib
{
[super awakeFromNib];
NSLog(@"Loaded!");
}
答案 0 :(得分:3)
我找到了BBPreferencesWindowController
没有很好地管理窗口的原因:在XIB中,文件所有者window
出口没有正确链接。
修复此问题也解决了所有其他问题。
感谢您的帮助!