好的,这是我面临的一个奇怪的情况:
我有一个NSWindowController
子类,myMainWindow.xib
中的一个窗口和AppDelegate.m
调用NSWindowController
这样的窗口:
myWindowController* controller = [[myWindowController alloc] initWithWindowNibName:@"myMainWindow"];
[controller showWindow:self];
现在就是:
NO
时,应用程序运行良好,窗口也显示正常。YES
时 - 在我设置它之后立即(并且为了JUST 1运行) - 它显示了一堆错误:Feb 17 16:35:45 DrKameleons-iMac.local MyApp [16903]: kCGErrorIllegalArgument:_CGSFindSharedWindow:WID 2409 Feb 17 16:35:45 DrKameleons-iMac.local MyApp [16903]:kCGErrorFailure: 设置断点@ CGErrorBreakpoint()以捕获错误 登录。 2月17日16:35:45 DrKameleons-iMac.local MyApp [16903]: kCGErrorIllegalArgument:CGSOrderFrontConditional:无效窗口
窗口不出现。
现在,如果我尝试重新运行应用程序(不更改任何内容,ARC仍然打开),窗口仍然不会显示。但是根本没有错误。 :S
发生了什么事?关于如何解决这个问题的想法(并使窗口出现)?
提示:
答案 0 :(得分:5)
当ARC打开时,LOCAL控制器在showWindow调用后立即释放!但是随着窗户被推迟,窗户甚至还没有 - 甚至它是,它将是'无控制器' 窗口不保留其控制器:)反之亦然
修复是记住对控制器的引用直到你的appDelegate被释放/直到你退出
@implementation AppDelegate {
myWindowController* _controller;
}
...
_controller = [[myWindowController alloc] initWithWindowNibName:@"myMainWindow"];
[_controller showWindow:self];
你的代码在没有弧的情况下工作,因为没有控制器的释放发生它只是泄漏! ARC确实添加了一个发布调用(因为它正确地看到控制器不再使用)