Проблема синхронизации при попытке сделать NSWindow keyWindow - PullRequest
1 голос
/ 11 января 2012

Я показываю свое главное окно, вызывая

[window makeKeyAndOrderFront:self];
[NSApp activateIgnoringOtherApps:YES];
[window setIsVisible:YES];
[window display];

, который работает, но не устанавливает окно для ключевого окна сразу после этого вызова.Мне нужно подождать "некоторое время", пока [NSApp keyWindow] не вернет фактическое window.

Теперь мне интересно, сколько времени это займет и как я могу заставить окно стать ключевым окном немедленно?

1 Ответ

0 голосов
/ 15 января 2012

Я думаю, что, вероятно, есть веские причины, по которым makeKeyAndOrderFront не является синхронным вызовом, а именно, может быть координация, связанная с несколькими окнами и объектами, о которых NSApplication необходимо позаботиться, чтобы это произошло, поэтому вынуждает окно кнемедленно стать ключом, вероятно, не поддерживается Какао.Это, однако, не может быть проблемой в зависимости от проблемы, которую вы пытаетесь решить.

Теперь я предполагаю, что некоторые из ваших методов зависят от того, является ли окно ключевым, и в данный момент они не работают должным образом, потому что окно не становится key сразу.Однако вы можете реализовать протокол NSWindowDelegate, установить себя в качестве делегата окна и переопределить метод - (void)windowDidBecomeKey:(NSNotification *)notification, чтобы узнать, когда окно стало ключевым.Это также должно быть глобальное уведомление в случае, если оно работает лучше для вас.

Для получения более подробной информации, ознакомьтесь с Apple Docs на http://developer.apple.com/library/mac/#documentation/cocoa/reference/NSWindowDelegate_Protocol/Reference/Reference.html

...