Я не получаю обратный вызов - (void) keyDown для моего унаследованного NSOpenGLView (обратите внимание, что mouseMoved также не работает, хотя я выполняю setAcceptsMouseMovedEvents: YES, но это пока не проблема). Реализует
- (BOOL)acceptsFirstResponder
{
return YES;
}
но все равно не повезло. Мой знающий друг подразумевал, что это может быть как-то связано с тем, что приложение по-прежнему является консольным приложением, а не в комплекте .app (сейчас я его портирую). Если так: есть ли способ обойти? Может ли быть причиной что-то еще? Когда я завершаю работу с консольным приложением, я часто вижу, как все мои нажатия клавиш переходят на стандартный вывод, поэтому это кажется разумным ...
Edit:
@implementation UiMacApplication
- (void)run
{
}
- (void)terminate:(id)sender
{
...
}
- (void)startDummyThread:(id)sender
{
printf("startDummyThread!\n");
}
@end
....
mApplication = (UiMacApplication*)[UiMacApplication sharedApplication];
[NSThread detachNewThreadSelector: @selector(startDummyThread:) toTarget: mApplication withObject: nil];
[[NSNotificationCenter defaultCenter] postNotificationName:NSApplicationWillFinishLaunchingNotification object: NSApp];
[[NSNotificationCenter defaultCenter] postNotificationName:NSApplicationDidFinishLaunchingNotification object: NSApp];
Основной цикл:
NSEvent* event = [mApplication nextEventMatchingMask: NSAnyEventMask
untilDate: nil
inMode: NSDefaultRunLoopMode
dequeue: YES];
[mApplication sendEvent: event];
[mApplication updateWindows];
Редактировать 2:
Запуск через консоль вызвал проблему. Простое преобразование его в правильный .app заставило его получать keyDown, keyUp и flagsChanged с первой попытки.