如何避免在用户关闭NSPanel时取消分配NSPanel



我正在开发一个小而简单的状态菜单应用程序
有一个菜单,当用户点击它时,会出现一个HUD窗口(NSPanel)。这就是我展示面板的方式:

[hudWindow makeKeyAndOrderFront: self]; 

这就是我关闭窗口的方式:

[hudWindow orderOut: nil];

这就是事件链:

  1. 当应用程序启动时,我会关闭窗口
  2. 然后用户(即我:-)点击菜单项并显示面板
  3. 然后我点击x并关闭面板
  4. 然后我再次点击菜单项,窗口不会再次出现

它不会再次出现,可能是因为它被释放了,而且我放了一个弱存储,否则如果__unsafe_unrepeat,它会在第二次发布时崩溃
所以我想,当用户点击窗口时,是否有办法避免取消分配窗口。
我尝试过使用强大的存储,但在第二次启动时,我无法再次关闭它,这是一个问题
有许多菜单状态应用程序可以显示窗口,而用户可以"杀死"它,我会做一些类似的事情。

您应该取消IB中的"关闭时释放"复选框(或在代码中执行等效操作)。默认情况下,面板会选中该框。

使用强指针可能不起作用,因为releasedWhenClosed设置会覆盖它。有一个强指针只意味着保留计数将至少为一,但这并不妨碍系统向面板显式发送释放消息。

你不能把你的属性从弱改为强吗?

最新更新