このアプリケーションには、AppController、Profile、ProfileBuilderの3つのクラスがあります。また、クラスごとに1つずつ、合計3つのウィンドウが必要です。3つすべてをNSObjectのサブクラスとして保持し、initWithNibNameをNSWindowControllerクラスのWindowController変数に適用しようとしましたが、各ウィンドウにいくつかの値を出力しようとすると機能せず、NSLogを使用するとウィンドウがnullになりました。複数のウィンドウを管理するための最良の方法は何でしょうか。おそらく、他のクラスにできるだけ特定のコードを含まないAppWindowsControllerのような同じクラスからのものであり、可能であれば、他のクラスをNSWindowControllerではなくNSObjectのサブクラスとして保持します。 。したがって、ウィンドウの動作をリモートで制御し、特定のクラス内に可能な限りコードを追加する方法がある場合は、それらを可能な限り明確に保ち、それらのコンテンツに独自に焦点を合わせるためだけに。おかげで、私が自分自身を明確にしたことを願っています、私は実際にはCocoaフレームワークにかなり慣れていません。
2300 次
2 に答える
6
さまざまなクラスの init メソッドで、ウィンドウに nib ファイルをロードできるはずです。たとえば、プロファイルでは、次のようなことができます。
-(id)init {
if (self = [super init]) {
NSArray *array;
BOOL success = [[NSBundle mainBundle] loadNibNamed:@"ProfileWindow" owner: self topLevelObjects:&array];
if (success) {
for (id obj in array) {
if ([obj isKindOfClass:[NSWindow class]]) {
self.profileWindow = obj;
}
}
[self.profileWindow makeKeyAndOrderFront:self];
}
}
return self;
}
profileWindow はプロパティです (strong と入力)。xib ファイルで、ファイルの所有者をプロファイルに設定しました。
于 2012-09-28T04:04:25.250 に答える
2
rdelmar のソリューションを改善したいだけです。
NSWindow
クラスを見つけるために配列を反復処理する必要はありません。profileWindow をアウトレットとして定義し、IB で接続すると、呼び出し
[[NSBundle mainBundle] loadNibNamed:@"ProfileWindow" owner:self topLevelObjects:&array];
ウィンドウオブジェクトをアウトレットに割り当てます。配列は必要ありません。ここで重要なのは、インターフェースとして機能する所有者オブジェクトです。IB では、所有者のクラス タイプを定義できます。そうであれば、そのアウトレットを参照してください。
于 2012-12-23T16:17:28.273 に答える