Dr.*_*eon 1 cocoa objective-c nswindow nswindowcontroller automatic-ref-counting
好的,这是我面临的一个奇怪的情况:
我有一个NSWindowController子类,一个窗口,myMainWindow.xib并AppDelegate.m调用NSWindowController这样的:
myWindowController* controller = [[myWindowController alloc] initWithWindowNibName:@"myMainWindow"];
[controller showWindow:self];
Run Code Online (Sandbox Code Playgroud)现在这是什么:
NO,然后应用程序运行正常,窗口也显示正常.YES- 在我设置它之后(并且为了JUST 1运行) - 它显示了一堆错误:2月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
到底是怎么回事?关于如何解决这个问题的想法(并使窗口出现)?
提示:
当ARC打开时,LOCAL控制器在showWindow调用后立即释放!但是由于窗口被延迟,窗口甚至还没有 - 甚至它是,它将是'无控制器'
窗口不保留其控制器:)反之亦然
修复是记住对控制器的引用直到你的appDelegate被释放/直到你退出
@implementation AppDelegate {
myWindowController* _controller;
}
...
_controller = [[myWindowController alloc] initWithWindowNibName:@"myMainWindow"];
[_controller showWindow:self];
Run Code Online (Sandbox Code Playgroud)
你的代码在没有弧的情况下工作,因为没有控制器的释放发生,它只是泄漏!ARC确实添加了一个发布调用(因为它正确地看到控制器不再使用)
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |