1

小さくてシンプルなステータスメニューアプリケーションを開発しています。
メニューがあり、ユーザーがそれをクリックすると、HUDウィンドウ(NSPanel)が表示されます。これが私がパネルを表示する方法です:

[hudWindow makeKeyAndOrderFront: self]; 

これが私がウィンドウを閉じる方法です:

[hudWindow orderOut: nil];

これがイベントチェーンです。

  1. アプリが起動したら、ウィンドウを閉じます。
  2. 次に、ユーザー(私です:-))がメニュー項目をクリックして、パネルを表示します。
  3. 次に、xをクリックしてパネルを閉じます。
  4. 次に、メニュー項目をもう一度クリックすると、ウィンドウが再び表示されません。

おそらく割り当てが解除されたために再び表示されることはなく、弱いストレージを配置しました。そうしないと、__ unsafe_unretainedを使用すると、2回目の起動時にクラッシュします。
したがって、ユーザーがウィンドウをクリックしたときにウィンドウの割り当てを解除しないようにする方法があるかどうかを推測しています。
強力なストレージを試してみましたが、2回目の起動時にこのケースを再度閉じることができず、問題が発生します。
ユーザーがウィンドウを「殺す」ことなくウィンドウを表示できるメニューステータスアプリケーションはたくさんありますが、私は似たようなものを作成します。

4

2 に答える 2

2

IBの[閉じたときに解放する]チェックボックスをオフにする必要があります(またはコードで同等の処理を行います)。パネルの場合、このボックスはデフォルトでオンになっています。

強いポインタを使用すると、releasedWhenClosed設定がそれを上書きするため、おそらく機能しません。強力なポインターがあるということは、保持カウントが少なくとも1になることを意味しますが、システムがリリースメッセージをパネルに明示的に送信することを妨げるものではありません。

于 2012-12-18T05:35:44.427 に答える
0

あなたはただあなたの財産を弱いものから強いものに変えることができませんか?

于 2012-12-18T00:05:59.680 に答える