私はドキュメントアーキテクチャを使用してCocoaアプリケーションを作成しています。このアプリで無題の文書が作成されるたびに、テンプレートを選択して他の情報の入力を促すウィンドウが表示されます。これらのウィンドウのうちの1つだけが一度に表示されるべきであり、好ましくは、テンプレート選択が表示されている間、アプリケーションの残りの部分と対話することが可能であるべきである。 (これは、ページがどのように振る舞うかである。)私は-[NSDocumentController openUntitledDocumentAndDisplay:error:]
をオーバーライドすることで、この作業のほとんどを持っているモーダルでないテンプレートチューザを同期的に表示
:
- (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument
error:(NSError *__autoreleasing *)outError {
TsDocument * doc = [self makeUntitledDocumentOfType:self.defaultType
error:outError];
if(!doc) {
return nil;
}
TsNewWindowController * newController = [TsNewWindowController new];
newController.document = doc;
if([NSApp runModalForWindow:newController.window] == NSRunAbortedResponse) {
if(outError) {
*outError = [NSError errorWithDomain:NSCocoaErrorDomain
code:NSUserCancelledError
userInfo:nil];
}
return nil;
}
[self addDocument:doc];
if(displayDocument) {
[doc makeWindowControllers];
[doc showWindows];
}
return doc;
}
しかし、あなたが見ることができるように、ウィンドウは残りのへのアクセスをブロックし、モーダル表示されますアプリ。テンプレートピッカーをモーダルにすることなく、私が望むものを達成する簡単な方法はありますか?
より明確にカップルの事を説明するために:
私はもちろん
-runModalForWindow:
ウィンドウがモーダル-それが名前に権利があります実行されることを知っています!私はまだブロック-openUntitledDocumentAndDisplay:error:
をブロックするウィンドウを表示するための別の方法を探しています。または、メソッドをブロックする必要はありません。私は、私は単に文書を作成することができると信じてnewController
のウィンドウを表示し、アプリが終了した場合、ので、後でドキュメントのmakeWindowControllers
とshowWindows
を呼び出し、復元しませんは、テンプレート表示されませんチューを、それが示しています通常の編集インターフェース。
「-runModalForWindow:」はモーダルウィンドウを実行することを覚えています。元の投稿を拡大して、その点についてさらに詳しく返信します。開いているドキュメントを返さずに、 '-openUntitledDocumentAndDisplay:error:'から実際に戻ることはできますか?私の呼び出し元が私にエラーを表示しようとしませんか? –
試してみるとどうなりますか? –
'openUntitledDocumentAndDisplay:error:'から 'nil'を返すと、例外がスローされます。 '' outError''は、間違いなく助けになりません。 –