为什么按 Escape 关闭 NSPanel 时我的应用程序会崩溃?

苦的

我的应用程序中有一个 NSPanel,main()只要按 Escape 键关闭它就会使应用程序崩溃(EXC_BAD_ACCESS in )。以任何其他方式关闭它(文件 > 关闭,Cmd-W,单击红色关闭按钮)工作正常。

通过从故事板实例化其窗口控制器来显示面板。对窗口控制器的引用存储在字典中。在视图控制器的-viewWillDisappear窗口控制器从字典中删除。

    wc = [[NSStoryboard storyboardWithName:@"Main" bundle:nil] instantiateControllerWithIdentifier:kSBIDPreviewWindowController];
    // ...
    [windowsOfType addObject:wc];
    // ...
    [wc showWindow:self];

关闭时:

-(void)viewDidDisappear {
    // ...
    if ([windowsOfType containsObject:winController]) {
        [windowsOfType removeObject:winController];
    }
}

崩溃显然是通过从字典中删除窗口控制器而触发的。如果我保留它,它就不会崩溃。

一些进一步的信息:

  • 该面板包含(仅)一个 WebView。
  • 面板的“关闭时释放”复选框已关闭。
  • 所有其他选项都是默认选项(启用时隐藏除外。)

我找不到调试器的问题,因为崩溃发生在 main() 中,即。窗户关闭后。

知道是什么原因造成的吗?

而且,更一般地说,我应该使用哪种技术来调试这种情况?

2018-02-19 更新:

启用僵尸让我得到了消息-[NSWindowController setNextResponder:]: message sent to deallocated instance 0x60000028a9b0所以在它被释放后,有东西正在与窗口控制器交谈。由于那不是我的直接代码(我什至没有继承 NSWindowController,也没有在任何地方对窗口控制器进行任何调用),问题仍然存在:与其他方法相比,通过点击 Escape 关闭窗口时有什么不同(像 Cmd-W)?

更新 2018-02-19 #2:

仪器给出了一个有趣的结果。显然,我在面板上的 WebView 尝试在面板关闭/解除分配处理按下 Escape 键(在我的情况下由视图控制器的-viewDidDisappear.触发

Zombie 源是-[WebResponderChainSink detach],由 调用(通过一些中间调用)-[WebHTMLView keyDown:]

看起来 WebView 没有正确传递按键或其他东西......?这是否意味着面板上的 WebView 是个坏主意?

苦的

我找到了避免此类崩溃的解决方案;您必须延迟释放对窗口控制器的最后一个引用,直到完成当前事件处理(dispatch_async()例如,通过使用)。

这允许 WebView 使用按键来完成它的工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我按下按钮开始 Toast 时,Java 应用程序关闭。但为什么?

来自分类Dev

为什么在我更改页面时关闭应用程序?

来自分类Dev

为什么从iOS模拟器中打开我的iOS应用程序会失败/关闭?

来自分类Dev

为什么关闭我的Android应用程序时cookie会丢失?

来自分类Dev

当按下后退按钮时,我的应用程序会关闭最近的应用程序

来自分类Dev

为什么这个抽屉会关闭我的应用程序?

来自分类Dev

为什么当我按下按钮在表中插入值时应用程序崩溃?

来自分类Dev

为什么我的应用程序在更改布局时崩溃?

来自分类Dev

为什么我的应用程序在执行按钮时崩溃?

来自分类Dev

按下“ Escape”键时离开奇异的应用程序

来自分类Dev

按下“ Escape”键时离开奇异的应用程序

来自分类Dev

如何检测由于失去焦点而导致NSPanel关闭的时间?例如,用户在NSPanel外部单击(窗口?)

来自分类Dev

当我按下后如何关闭应用程序?

来自分类Dev

为什么关闭终端时phpstorm关闭

来自分类Dev

在Chrome和Safari中按Escape键时的角度关闭模式对话框

来自分类Dev

当按下后退按钮并打开导航抽屉时,我的应用程序关闭而不是关闭抽屉

来自分类Dev

为什么我的应用程序崩溃了?

来自分类Dev

当我的应用程序意外关闭时,有什么方法可以获取错误日志?

来自分类Dev

为什么我触摸停止按钮,我的应用程序不幸关闭

来自分类Dev

为什么我触摸“停止”按钮,不幸的是我的应用程序关闭了

来自分类Dev

为什么在关闭应用程序后,Skype是“ top”进程?

来自分类Dev

为什么 Mac 应用程序永远不会“关闭”?

来自分类Dev

为什么在Windows 7中按Escape键时开始菜单会打开?

来自分类Dev

按返回按钮关闭应用程序

来自分类Dev

为什么我的应用程序强制在Android中使用getarguments()。getstring(key)强制关闭?

来自分类Dev

为什么我的Ionic应用程序要求获得相机许可?以及如何关闭它?

来自分类Dev

为什么sshtunnel阻止SIGINT关闭我的python应用程序?

来自分类Dev

为什么在使用xamarin Essentials Filepicker时应用程序关闭?

来自分类Dev

使用服务Android时,应用程序在关闭时崩溃,因为我试图使用意图

Related 相关文章

  1. 1

    当我按下按钮开始 Toast 时,Java 应用程序关闭。但为什么?

  2. 2

    为什么在我更改页面时关闭应用程序?

  3. 3

    为什么从iOS模拟器中打开我的iOS应用程序会失败/关闭?

  4. 4

    为什么关闭我的Android应用程序时cookie会丢失?

  5. 5

    当按下后退按钮时,我的应用程序会关闭最近的应用程序

  6. 6

    为什么这个抽屉会关闭我的应用程序?

  7. 7

    为什么当我按下按钮在表中插入值时应用程序崩溃?

  8. 8

    为什么我的应用程序在更改布局时崩溃?

  9. 9

    为什么我的应用程序在执行按钮时崩溃?

  10. 10

    按下“ Escape”键时离开奇异的应用程序

  11. 11

    按下“ Escape”键时离开奇异的应用程序

  12. 12

    如何检测由于失去焦点而导致NSPanel关闭的时间?例如,用户在NSPanel外部单击(窗口?)

  13. 13

    当我按下后如何关闭应用程序?

  14. 14

    为什么关闭终端时phpstorm关闭

  15. 15

    在Chrome和Safari中按Escape键时的角度关闭模式对话框

  16. 16

    当按下后退按钮并打开导航抽屉时,我的应用程序关闭而不是关闭抽屉

  17. 17

    为什么我的应用程序崩溃了?

  18. 18

    当我的应用程序意外关闭时,有什么方法可以获取错误日志?

  19. 19

    为什么我触摸停止按钮,我的应用程序不幸关闭

  20. 20

    为什么我触摸“停止”按钮,不幸的是我的应用程序关闭了

  21. 21

    为什么在关闭应用程序后,Skype是“ top”进程?

  22. 22

    为什么 Mac 应用程序永远不会“关闭”?

  23. 23

    为什么在Windows 7中按Escape键时开始菜单会打开?

  24. 24

    按返回按钮关闭应用程序

  25. 25

    为什么我的应用程序强制在Android中使用getarguments()。getstring(key)强制关闭?

  26. 26

    为什么我的Ionic应用程序要求获得相机许可?以及如何关闭它?

  27. 27

    为什么sshtunnel阻止SIGINT关闭我的python应用程序?

  28. 28

    为什么在使用xamarin Essentials Filepicker时应用程序关闭?

  29. 29

    使用服务Android时,应用程序在关闭时崩溃,因为我试图使用意图

热门标签

归档