首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭NSWindow

关闭NSWindow
EN

Stack Overflow用户
提问于 2010-03-04 05:14:47
回答 3查看 8.1K关注 0票数 2

我有一个NSWindow,它承载了一个WebView,它已经连接到了一个脚本处理程序。

现在,当用户单击WebView上的控件上的一个按钮时,它会在我的对象上调用一个object方法。

在这种特殊情况下,按钮的操作是尝试关闭承载WebView的窗口。

[webView窗口关闭];

这通常是可行的,但有时我会得到一个SEGFAULT或其他一些访问冲突,这是由于事件循环试图向现在破坏的视图发送鼠标消息。

当我试图关闭窗口时,调用堆栈是可怕的,偶数循环调用了窗口,调用了webView,当我试图关闭窗口时调用了脚本委托。从该对象的回调中销毁对象通常是危险的,但我不知道如何安全地关闭窗口,因为用户与其上的视图交互。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-04 17:37:50

当我试图关闭窗口时,调用堆栈是可怕的,偶循环调用了窗口,调用了webView,当我试图关闭窗口时调用了脚本委托。从该对象的回调中销毁对象通常是危险的,但我不知道如何安全地关闭窗口,因为用户与其上的视图交互。

您可以使用performSelector:withObject:afterDelay:将关闭窗口的时间推迟到按钮点击后的0.0秒。

在这种特殊情况下,按钮的操作是尝试关闭承载

的窗口。

[webView窗口关闭];

这通常是可行的,但有时我会得到一个SEGFAULT或其他一些访问冲突,这是由于事件循环试图向现在破坏的视图发送鼠标消息。

那不太可能。事件循环将只为一个存在的窗口分派一个事件;如果您已经关闭并因此破坏了一个窗口,则没有任何事件能够到达该窗口,也不会到达任何曾经在该窗口中的视图。

如果您要编辑您的问题以包含该崩溃的堆栈跟踪,则会有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2010-03-04 05:54:33

除了关闭,你不能试试API吗?

代码语言:javascript
复制
- (void)orderOut:(id)sender

只需检查您的窗口是否可见,并将该窗口排序。

代码语言:javascript
复制
if([[webView window] isVisible])
   [[webView window] orderOut:self];
票数 6
EN

Stack Overflow用户

发布于 2014-07-27 14:09:50

我知道这是一个老问题,但我也有一个类似的问题,我怀疑公认的答案是遗漏了重点。我相信承载WebView的窗口仍然是WebView的一个或多个委托,委托方法是在WebView完成加载(即窗口关闭后)之后调用的。

我在寻找解决这个…的正确方法我会继续找。:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2377038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档