Как использовать KVO, чтобы определить, когда приложение становится активным?

У меня есть следующий код в приложении Какао:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
   NSArray* arrayAppList = [[NSWorkspace sharedWorkspace] runningApplications];
}

Я намерен использовать KVO для обнаружения приложения, когда оно меняет свое состояние с неактивного на активное.

Я прочитал, что я должен использовать метод экземпляра -addObserver:forKeyPath:options:context:

А потом использовать -observeValueForKeyPath:ofObject:change:context: отвечать на уведомления об изменениях.

Я это понимаю -observeValueForKeyPath это метод обратного вызова, где я могу написать код, чтобы ответить на изменения свойств, которые меня интересуют.

Тем не менее, я смущен тем, как я должен использовать метод addObserver, чтобы получать уведомления, когда active собственность runningApplications менять. Теперь мне интересно, где находится место для регистрации, сейчас я использую -applicationDidFinishLaunching но не уверен, если это правильное место, чтобы сделать это. Кроме того, если я использую -observeValueForKeyPath метод обратного вызова, я должен реализовать его в классе, который наследует от NSObject и это тот же класс, где я регистрирую уведомление?

1 ответ

  1. Вы должны позвонить addObserver:… метод на каждом объекте в runningApplications массив (используя isActive в качестве ключевого пути).

  2. Начало наблюдения после того, как ваше приложение заканчивает запуск звуков о праве. Что касается времени, то есть. Что касается места, должен быть отдельный класс, посвященный этим наблюдениям. Внедрив код наблюдения прямо в делегате приложения, вы нарушите принцип единственной ответственности (а это означает головную боль в долгосрочной перспективе).

  3. observeValueForKeyPath:… обратный вызов должен быть реализован объектом, который вызвал addObserver:… методы.

Другие вопросы по тегам