NSWorkspaceDidActivateApplicationNotification вызывается до того, как приложение готово к использованию (запущено)

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

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

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

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

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

1 ответ

Решение

Проверьте объект NSRunningApplication, переданный в userinfo NSWorkspaceDidActivateApplicationNotification

NSRunningApplication *app = [note.userInfo objectForKey:NSWorkspaceApplicationKey]; 
if(app.isFinishedLaunching) 
    NSLog(@"up");
Другие вопросы по тегам