2012-02-29 5 views
3

私は、Macのメニューバーにあるアプリケーションを持っていて、そのアプリケーションを制御するためのメニューエントリがあります。アプリケーションがやりとりすることなくしばらくの間実行された後、すべてのメニューエントリは無効になります。メニューを「修正」する唯一の方法は、アプリをもう一度起動することです(既に実行中で、アプリを終了せずに)。メニュー項目は再び有効になります。メニューバーのメニュー項目が無効になる

私はこのメニューのIBOutletを弱く宣言していて、それは強くなければならないため、問題の原因は何ですか?あるいは、これが起こる別の理由がありますか?

答えて

1

私はメニューバーに座っている同じようなアプリの著者です。あなたが説明している問題を見ずに長時間走り続けることができました。私はあなたの問題の原因を正確にはわかりませんが、私はちょうどうまくいくようなNSMenuのための強力なIBOutletリファレンスを使用していると言えるでしょう。

+0

私は他の誰かから強く使うという考えを持っています。私は今それをテストしています...しかし、それが適切に機能するかどうかを尋ねるでしょう。ありがとう。また、良いアプリのように見えます。私は5by5ポッドキャストのファンです。 – Dustin

+0

これはまさに私が探していた答え、 – Dustin

1

NSMenuS NSMenuItemsの自動検証を行います。アイテムターゲットのいずれかがnilである場合、またはターゲットが意図したメッセージに応答しない場合は、自動的に無効になります。この動作を無効にするには、NSMenuサブクラスのvalidateMenuItem:implenetを実行します。しかし、NSMenuItemsが無効になっているときには通常、メッセージの対象が解放された、またはもはや利用できないということに注意してください。

+0

+1です。これはもともと私がこの問題について聞いたときに考えたことです。 –

1

Mac OS XでARCを使用している場合、は、控え室のトップレベルオブジェクトにアウトレットを作成するときに参照番号strongを使用してください。そうしないと、オブジェクトが解放されます。

iOSでは、UIViewControllerの動作が異なるため、代わりにweakの参照を使用する必要があります。

関連する問題