Как использовать 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 ответ
Вы должны позвонить
addObserver:…
метод на каждом объекте вrunningApplications
массив (используяisActive
в качестве ключевого пути).Начало наблюдения после того, как ваше приложение заканчивает запуск звуков о праве. Что касается времени, то есть. Что касается места, должен быть отдельный класс, посвященный этим наблюдениям. Внедрив код наблюдения прямо в делегате приложения, вы нарушите принцип единственной ответственности (а это означает головную боль в долгосрочной перспективе).
observeValueForKeyPath:…
обратный вызов должен быть реализован объектом, который вызвалaddObserver:…
методы.