我在Cocoa应用程序中有以下代码:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSArray* arrayAppList = [[NSWorkspace sharedWorkspace] runningApplications];
}
我的目的是在将状态从非活动状态更改为活动状态时使用KVO来检测应用程序。
我读到我必须使用实例方法-addObserver:forKeyPath:options:context:
然后使用-observeValueForKeyPath:ofObject:change:context:
来回复更改通知。
我理解-observeValueForKeyPath
是一种回调方法,我可以编写代码来响应我感兴趣的属性更改。
尽管如此,我对如何使用addObserver方法感到困惑,以便在active
的{{1}}属性发生更改时收到通知。现在,我想知道注册的地方在哪里,现在我正在使用runningApplications
但不确定是否是正确的地方。另外,如果我使用-applicationDidFinishLaunching
回调方法,我必须在继承自-observeValueForKeyPath
的类中实现它,并且是我注册通知的同一个类?
答案 0 :(得分:4)
您应该在addObserver:…
数组中的每个对象上调用runningApplications
方法(使用isActive
作为关键路径)。
在您的应用完成右侧发声后开始观察。时间顺序,即。至于这个地方,应该有一个专门用于这些观察的单独课程。通过在应用代表中实施观察代码,您将违反单一责任原则(这意味着长期头痛)。
observeValueForKeyPath:…
回调应该由调用addObserver:…
方法的对象实现。