2011-02-05 10 views
1

ループでは、私は、ユーザーが彼/彼女の設定を入力していない場合、環境設定ウィンドウを読み込むために、次のコードを使用しています。nibが既にロードされているかどうかを確認できますか?

[NSBundle loadNibNamed:@"prefs" owner:self]; 

私の問題は、毎回ループが新しいウィンドウがするまで何度も何度も開いて実行されることを、窓やペン先が既に一度ロードされているかどうかを確認する方法はありますか?

ありがとうございます! :)

+0

[インスタンスが既にロードされている場合、ペン先がロードされないようにする方法](http://stackoverflow.com/questions/4895286/how-to-prevent-a-nib-from-loading-if) - すでにインスタンスにロードされている) –

答えて

4

のではなく、あなたがやっているようペン先の負荷をマイクロ管理、ちょうど使用します。下記のリンクはシングルトンについての例を保持していますサブクラスNSWindowControllerを使用して、設定ウィンドウを処理します。 NSWindowControllerがあなたのためのすべてのnib管理を扱うならば、あなたは窓を表示するために-showWindow:に電話する必要があります。 NSWindowControllerの唯一の実際のトリックは、ペン先のFile Ownerのwindowアウトレットを確実に接続することです。

クラスをインスタンス化するには、‑initWithWindowNibName:をペン先の名前で渡します。

前述のIef2が示すように、このオブジェクトはシングルトンとして動作するように構成する必要があります。

1

PreferencesControllerという名前のクラスを作ることができます。要求されたときにそのクラスにペン先をロードし、ウィンドウをivarで保存します。クラスのインスタンスを作成してアクティブ化するたびに、ウィンドウivarがnilであるかどうかを確認します。そうである場合は、ペン先をロードします。そうでない場合は、ウィンドウのキーを作成し、前面を注文します。

ウィンドウの保存に加えて、ユーザーがウィンドウを閉じるときにウィンドウを監視することもできます。彼または彼女がするとき、あなたはあなたのivarを解放して、それをゼロにすることができます。もう一度リクエストすると、ウィンドウがキャッシュされていないことがわかり、ペン先をリロードする必要があります。それはしかし、メモリを節約します。

また、クラスの共有インスタンスを作成することをお勧めします。私はiPod touchを利用しているのでサンプルを入れることはできませんが、すばらしいGoogle検索が本当に役立つはずです。

は、それが助け IEF2

EDITホープ:

http://eschatologist.net/blog/?p=178

関連する問題