Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 避免自动释放正在打开另一个NSWindow的NSWindow?_Objective C_Cocoa - Fatal编程技术网

Objective c 避免自动释放正在打开另一个NSWindow的NSWindow?

Objective c 避免自动释放正在打开另一个NSWindow的NSWindow?,objective-c,cocoa,Objective C,Cocoa,当我打开一个自动释放的NSWindow时,一切正常。NSWindow仅在我单击OK按钮后才由我的根类释放 但是,当我打开一个NSWindow并从打开的NSWindow打开一个新的NSWindow时,我得到了一个错误的访问错误。发生这种情况的原因是第一个窗口不再被认为是活动的,它由根类释放 如何避免此问题?一个简单的答案:不要这样做,您依赖于未定义的行为并要求崩溃。您应该保持对窗口的强引用,并且只有在使用完窗口后才释放它 通常,您应该使用NSWindowController来管理您打开的每个窗口N

当我打开一个自动释放的
NSWindow
时,一切正常。
NSWindow
仅在我单击OK按钮后才由我的根类释放

但是,当我打开一个
NSWindow
并从打开的
NSWindow
打开一个新的
NSWindow
时,我得到了一个错误的访问错误。发生这种情况的原因是第一个窗口不再被认为是活动的,它由根类释放


如何避免此问题?

一个简单的答案:不要这样做,您依赖于未定义的行为并要求崩溃。您应该保持对窗口的强引用,并且只有在使用完窗口后才释放它

通常,您应该使用
NSWindowController
来管理您打开的每个窗口
NSWindowController
保存对窗口的引用,您可以轻松调用
NSWindowController
showWindow:
close:
方法来管理窗口显示


从您的问题来看,您似乎正在使用
NSWindow
对象作为窗口控制器。这不是您应该如何使用
NSWindow
。改用
NSWindowController
,这就是它的用途。

可能在属性检查器中选中了“关闭时释放”?这很清楚。只有一件事:关闭主文档的窗口后,从主文档中释放NSWindowController的正确方法是什么?换句话说,我现在有一个强大的参考,但我不确定是否应该从正在关闭窗口的NSWindowController向文档发送通知,通知文档释放窗口控制器。如果您认为可能会再次显示窗口,则无需删除窗口控制器。懒洋洋地加载它,使它只在您需要时分配,然后保持初始化状态。然后,您可以轻松地打开和关闭窗口。如果必须取消分配,请使用nil对象为
NSWindowWillCloseNotification
通知注册文档,然后在收到通知时,检查是否是窗口控制器的窗口,如果是,请释放窗口控制器。谢谢您的完整回答