ほとんどのシステムでは、「新しいウィンドウを開く」のデフォルトの動作は、前面に表示されることです。これは Cocoa では発生しません。私は、この標準的な動作を行うための「正しい」方法を見つけようとしています。私が試したほとんどのことは、最大1 つのウィンドウでしか機能しません。
起動時に複数のウィンドウを開く必要があります。
- (N x NSDocuments (それぞれ 1 つのウィンドウ)
- NIB ファイルを開くシンプルな NSWindowController x 1。
機能しないもの:
- 開きたいすべての NSDocuments を繰り返し処理し、それらを開きます。
何が起こるのですか?... open を呼び出す「最後の」ものだけが前面に表示されます。残りは、すばやく切り替えるか、[ウィンドウ] メニューを使用してそれらを見つけるまで、非表示になり、画面のどこにも表示されません。
コード:
...documents is an array of NSPersistentDocument's, loaded from CoreData...
[NSDocumentController sharedDocumentController];
[controller openDocumentWithContentsOfURL:[documents objectAtIndex:0] display:YES error:&error];
- ウィンドウを開いた後、各ウィンドウで「makeKeyAndOrderFront」を手動で呼び出す
何が起こるのですか?違いはありません。しかし、NSWindow インスタンスを取得するために私が見つけた唯一の方法は、非常にハックであり、完全に間違っているようです (ただし、いくつかのブログやメーリング リストの投稿で言及されています)。
コード:
[NSDocumentController sharedDocumentController];
NSDocument* openedDocument = [controller openDocumentWithContentsOfURL:[documents objectAtIndex:0] display:YES error:&error];
[[[[openedDocument windowControllers] objectAtIndex:0] window] makeKeyAndOrderFront:nil];
...私はこれが間違っていることを知っていますが、なぜ/何を別の方法で行うべきかわかりません:(。
通常は機能しますが、常に機能するとは限りません。
- 上記と同じですが、代わりに「showWindow」を使用してください (これは NSDocument ガイドから取得しました)。
奇妙なことに、Apple が内部的に呼び出していると主張している正確なコードであるにもかかわらず、これは時々機能します。彼らが内部的に呼び出している場合、既に呼び出した後に再度呼び出すと、なぜ異なる動作をするのでしょうか?
[[[openedDocument windowControllers] objectAtIndex:0] showWindow:self];