1

カスタム NSWindowController をモーダル ウィンドウとして実行しています。

まず、次のように示します。

ProgressWindow *pWin = [[ProgressWindow alloc] initWithWindowNibName:@"ProgressWindow" andXmlContent:nil];        
[NSApp runModalForWindow:[pWin window]];

そして、ProgressWindow の NSWindowController 内からそれを却下したいと考えています。そのために、windowDidLoad 関数に次のコードを設定します (テストのためだけに):

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]];
[self testMethod];

予想どおり、2 秒後に testMethod が呼び出されます。メソッドはモーダル ウィンドウを閉じる必要がありますが、それを行う方法が見つからないようです。、、、シート[NSApp stopModal]にして呼び出してみましたが、何もうまくいかないようです。何も起こらないか、ウィンドウが別の場所で再び開きます。なぜこれが起こっているのかわかりません。初期化コードは一度だけ呼び出されます。[NSApp abortModal][self close][self.window orderOut:nil];[NSApp endSheet:self.window];

閉め方わかる人いますか???

4

1 に答える 1

-1

RunLoop を間違った方法で使用していると思います。RunLoop は、アプリ内の GUI ウィジェットの表示と対話を管理するループです。メインの RunLoop を停止すると、アプリの更新が停止します。

runUntilDate を使用しているため、メインの RunLoop が停止したため、GUI 更新の処理を停止しています。

必要な機能を取得するには、runloop に addTimer を使用するか、stopModal メッセージを開始する引数セレクターで別の NSTimer を使用できます。

于 2012-05-23T09:50:47.577 に答える