1

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

[hudWindow makeKeyAndOrderFront: self]; 

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

[hudWindow orderOut: nil];

这就是事件链:

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

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

4

2 回答 2

2

您应该取消选中 IB 中的“关闭时释放”复选框(或在代码中完成等效操作)。该框默认为面板选中。

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

于 2012-12-18T05:35:44.427 回答
0

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

于 2012-12-18T00:05:59.680 回答