0

Я использую уведомления NSWorkspaceDidActivateApplicationNotification и NSWorkspaceDidLaunchApplicationNotification, чтобы узнать, с каким приложением пользователь взаимодействует.NSWorkspaceDidActivateApplicationNotification вызывается до того, как приложение будет готово к использованию (запущено)

Проблема заключается в том, что если приложение только что открыто и продолжает запускаться, я сначала получаю уведомление об активации и вскоре после этого уведомляет о запуске.

Есть ли способ узнать в рамках метода активации, что приложение все еще запускается и еще не готово к использованию? (Все еще подпрыгивая в доке)

Я вижу, что образец проекта ichat от Apple не использует вышеупомянутый подход и вместо этого слушает только запуск уведомлений. Затем он использует kAXApplicationActivatedNotification для добавления AXObserver в приложение. Это предпочтительный способ? (И также NSRunningApplications, чтобы добавить наблюдателя ко всем уже загруженным приложениям).

Я хотел продолжать использовать простые простые NSNotifications, потому что я думаю, что это может быть меньше памяти. (Нет необходимости держать наблюдателя для каждого загруженного приложения).

ответ

3

проверка объекта NSRunningApplication прошел в UserInfo из NSWorkspaceDidActivateApplicationNotification

NSRunningApplication *app = [note.userInfo objectForKey:NSWorkspaceApplicationKey]; 
if(app.isFinishedLaunching) 
    NSLog(@"up"); 
+0

Спасибо, это работает. Считаете ли вы, что это лучший способ, чем то, как яблоко делало это в своем примере приложения статуса ichat (http://developer.apple.com/library/mac/#samplecode/iChatStatusFromApplication/Introduction/Intro.html)? Нет никакой разницы в скорости уведомления? Кроме того, как насчет углеродных приложений? Они также отправляют эти NSNotifications? – Wesley