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

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

- (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 Ответ

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

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

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

...