我有一个NSWindow,它承载了一个WebView,它已经连接到了一个脚本处理程序。
现在,当用户单击WebView上的控件上的一个按钮时,它会在我的对象上调用一个object方法。
在这种特殊情况下,按钮的操作是尝试关闭承载WebView的窗口。
[webView窗口关闭];
这通常是可行的,但有时我会得到一个SEGFAULT或其他一些访问冲突,这是由于事件循环试图向现在破坏的视图发送鼠标消息。
当我试图关闭窗口时,调用堆栈是可怕的,偶数循环调用了窗口,调用了webView,当我试图关闭窗口时调用了脚本委托。从该对象的回调中销毁对象通常是危险的,但我不知道如何安全地关闭窗口,因为用户与其上的视图交互。
发布于 2010-03-04 17:37:50
当我试图关闭窗口时,调用堆栈是可怕的,偶循环调用了窗口,调用了webView,当我试图关闭窗口时调用了脚本委托。从该对象的回调中销毁对象通常是危险的,但我不知道如何安全地关闭窗口,因为用户与其上的视图交互。
您可以使用performSelector:withObject:afterDelay:将关闭窗口的时间推迟到按钮点击后的0.0秒。
在这种特殊情况下,按钮的操作是尝试关闭承载
的窗口。
[webView窗口关闭];
这通常是可行的,但有时我会得到一个SEGFAULT或其他一些访问冲突,这是由于事件循环试图向现在破坏的视图发送鼠标消息。
那不太可能。事件循环将只为一个存在的窗口分派一个事件;如果您已经关闭并因此破坏了一个窗口,则没有任何事件能够到达该窗口,也不会到达任何曾经在该窗口中的视图。
如果您要编辑您的问题以包含该崩溃的堆栈跟踪,则会有所帮助。
发布于 2010-03-04 05:54:33
除了关闭,你不能试试API吗?
- (void)orderOut:(id)sender只需检查您的窗口是否可见,并将该窗口排序。
if([[webView window] isVisible])
[[webView window] orderOut:self];发布于 2014-07-27 14:09:50
我知道这是一个老问题,但我也有一个类似的问题,我怀疑公认的答案是遗漏了重点。我相信承载WebView的窗口仍然是WebView的一个或多个委托,委托方法是在WebView完成加载(即窗口关闭后)之后调用的。
我在寻找解决这个…的正确方法我会继续找。:-)
https://stackoverflow.com/questions/2377038
复制相似问题