NSWindowController showWindow:nil 啥都不做

Posted

技术标签:

【中文标题】NSWindowController showWindow:nil 啥都不做【英文标题】:NSWindowController showWindow:nil does nothingNSWindowController showWindow:nil 什么都不做 【发布时间】:2013-02-24 15:24:13 【问题描述】:

就像标题一样,[myWindowController showWindow:nil] 不起作用。以下是您可能需要了解的一些事实:

我的窗口控制器:KRAuthenticationWindowController 接口生成器文件:AuthenticationWindow.xib 文件的所有者是KRAuthenticationWindowController window插座已连接到窗口 Window 的delegate 已连接到文件的所有者 窗口的Visible at launch 未选中 Window 的 Release when closed 也未选中

我的代码如下:

// KRApplicationDelegate.m

- (void)applicationDidFinishLaunching:(NSNotification *)notification 
    NSLog(@"%s",__PRETTY_FUNCTION__);
    KRAuthenticationWindowController *authWindowController = [[KRAuthenticationWindowController alloc] init];
    [authWindowController showWindow:nil];
    [[authWindowController window] makeKeyAndOrderFront:nil];


// KRAuthenticationWindowController.m

- (id)init 
    self = [super initWithWindowNibName:@"AuthenticationWindow"];
    if(!self) return nil;
    NSLog(@"%s",__PRETTY_FUNCTION__);
    return self;


- (void)loadWindow 
    [super loadWindow];
    [self.window setBackgroundColor:[NSColor colorWithDeviceWhite:0.73 alpha:1]];
    NSLog(@"%s",__PRETTY_FUNCTION__);


- (void)windowDidLoad 
    [super windowDidLoad];
    NSLog(@"%s",__PRETTY_FUNCTION__);


- (void)showWindow:(id)sender 
    [super showWindow:sender];
    NSLog(@"%@",self.window);
    NSLog(@"%s",__PRETTY_FUNCTION__);

我的控制台输出:

2013-02-24 16:21:45.420 Application[3105:303] -[KRApplicationDelegate applicationDidFinishLaunching:]
2013-02-24 16:21:45.421 Application[3105:303] -[KRAuthenticationWindowController init]
2013-02-24 16:21:45.428 Application[3105:303] -[KRAuthenticationWindowController loadWindow]
2013-02-24 16:21:45.428 Application[3105:303] -[KRAuthenticationWindowController windowDidLoad]
2013-02-24 16:21:45.556 Application[3105:303] <NSWindow: 0x10016e860>
2013-02-24 16:21:45.556 Application[3105:303] -[KRAuthenticationWindowController showWindow:]

我想我只是错过了一些重要的事情。任何帮助将不胜感激。

【问题讨论】:

也许你有这个问题中描述的问题***.com/questions/3539721/… 【参考方案1】:

尝试将 authWindowController 转换为实例变量。目前,它是一个局部变量。当局部变量消失时,可能会释放窗口控制器和带有它的窗口,因此它永远不会显示。

【讨论】:

如果您使用 ARC,可能会发生这种情况,更多详细信息请参见此问题 ***.com/questions/11677043/… 刚刚遇到同样的问题,感谢您的建议 哈哈 我很惊讶自己在完全相同的情况下运行!在 10.11 测试版上,我首先认为这是测试版中的一个错误:P 多么愚蠢;谢谢你的回答!

以上是关于NSWindowController showWindow:nil 啥都不做的主要内容,如果未能解决你的问题,请参考以下文章

NSWindowController showWindow: 闪烁窗口

来自 NSWindowController Cocoa 的自定义视图

NSManagedObjectContext 传递给 NSWindowController 变为 nil

Interface builder中的NSWindowController对象链接

如何使用 xib 文件正确实现 NSWindowController 子类

Swift 中的 NSWindowController。使用 Nib 进行子类化和初始化