В большинстве систем поведение «открыть новое окно» по умолчанию заключается в том, что оно отображается спереди.Этого не происходит в Какао, и я пытаюсь найти «правильный» способ сделать это стандартное поведение.Большинство вещей, которые я пробовал, работают только для максимум одного окна.
Мне нужно при запуске открыть несколько окон:
- (N x NSDocuments (одно окно каждое)
- 1 x простой NSWindowController, открывающий файл NIB.
Вещи, которые НЕ работают:
- Переберите все 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];