0

NSWindowController を拡張するクラス BrowserWindowController があります。私のアプリ デリゲートには、アプリの起動時にインスタンス変数を割り当て、初期化し、ポイントする BrowserWindowController があります。次に、そのウィンドウを表示します。目標は、NIB からのウィンドウを表示することです。

ただし、私が使用しているコードは、最終的に 2 つの BrowserWindowControllers を割り当て、両方を初期化します。BWC の initWithWindow メソッドが呼び出されるタイミングを追跡するために、デバッガーを使用しました。

browser = [[BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"]; //this calls initWithWindow as expected
[browser showWindow:nil]; //this allocates ANOTHER BWC and calls initWithWindow on it!

showWindow は新しい BrowserWindowController を作成しています。それが作成する新しいオブジェクトを指すものはわかりません。それは私にとって大きな問題です。これを回避する方法、または別の方法を使用してウィンドウを表示する方法はありますか? または、何らかの理由で showWindow が作成するコントローラーへのポインターを少なくとも取得できますか?

4

2 に答える 2

0

史上最悪の解決策。問題は、NSString である「所有者」と呼ばれるプロパティがコントローラーにあることでした。NSWindowController には既に「所有者」プロパティがあり、それを見落としていました。どういうわけか、NIB ローダーがアクセス可能なポインタを持たない 2 番目のコントローラを作成し、他のいくつかの奇妙なことを行う原因となりました。

そのため、名前を変更しましたが、現在は機能しています。よかった…私はこの問題で髪を引き裂いていました。

于 2013-10-10T02:50:26.773 に答える