2015-05-21 1 views
0

У меня есть основной цикл сообщений. Я ищу способ проверить, является ли событие AppleEvent, и если это класс событий из «MyClass», тогда сделайте что-нибудь. Я смотрел в ссылке NSEvent и был потерян, не нахожу то, что мне нужно. Может кто-нибудь предложить подход?Идентификация AppleEvents в основном контуре сообщения

while (!shutdown_now_) 
    { 
     NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
     NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask 
              untilDate:[NSDate distantFuture] 
               inMode:NSDefaultRunLoopMode 
               dequeue:YES]; 

     //if event is AppleEvent AND event class is <MyEventClass> then do something 

     if (event) [NSApp sendEvent:event]; 
     [pool drain]; 
} 

ответ

0

Вы не можете получить событие Apple через NSEvent в своем цикле.

Потому что NSEvent просто не покрывает его.

Documentation говорит

Почти все события в приложении какао представлены объектами класс NSEvent. (Исключения включают события Apple, уведомления, и т. Д.) Каждый объект NSEvent более узко представляет собой определенный тип события , каждый со своими требованиями к обработке. Следующие разделы описывают черты NSEvent объекта и возможные типы событий

Вы можете найти более подробную информацию в NSApplicationdocumentation


Вместо этого вы можете использовать NSAppleEventManager класс зарегистрировать свой собственный Ячейки событий Apple со следующими method

- (void)setEventHandler:(id)handler 
      andSelector:(SEL)handleEventSelector 
      forEventClass:(AEEventClass)eventClass 
      andEventID:(AEEventID)eventID 
+0

AppleEvent как и другие события, отправленные из очереди сообщений. Если Событие является событием Apple, оно отправляется в AppleEvent Manager, который ищет в таблице отправки и вызывает зарегистрированного обработчика. Я знаю, как регистрировать обработчики, и это работает для меня. – Sanich

+0

События Apple - это исключения из того, что покрывает 'NSEvent'. Проверьте обновленный ответ – deimus

+0

Я отлаживал цикл. AppleEvents перенаправляются на AppleEvent Manager из nextEventMatchingMask – Sanich