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

时间:2012-12-17 23:39:04

标签: objective-c cocoa nspanel

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

[hudWindow makeKeyAndOrderFront: self]; 

这是我解雇窗口的方式:

[hudWindow orderOut: nil];

这就是事件链:

  1. 当应用程序启动时,我关闭窗口;
  2. 然后用户(就是我:-))点击菜单项并使面板显示;
  3. 然后我点击x并关闭面板;
  4. 然后我再次点击菜单项,窗口不再出现。
  5. 它可能不再出现,因为它被取消分配,而且我已经放置了一个弱存储,否则使用__unsafe_unretained它会在第二次启动时崩溃。
    所以我猜测当用户点击它时是否有办法避免取消分配窗口 我试过一个强大的存储空间,但是这个案例在第二次发布时我无法再次关闭它,这是一个问题。
    有许多菜单状态应用程序能够显示一个窗口而不是用户可以“杀死”它,我会做类似的东西。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

难道你不能把你的财产从弱变为强吗?