如何使用KVO检测应用程序何时生效?

时间:2011-11-29 20:32:28

标签: macos key-value-observing nsworkspace nsrunningapplication

我在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的类中实现它,并且是我注册通知的同一个类?

1 个答案:

答案 0 :(得分:4)

  1. 您应该在addObserver:…数组中的每个对象上调用runningApplications方法(使用isActive作为关键路径)。

  2. 在您的应用完成右侧发声后开始观察。时间顺序,即。至于这个地方,应该有一个专门用于这些观察的单独课程。通过在应用代表中实施观察代码,您将违反单一责任原则(这意味着长期头痛)。

  3. observeValueForKeyPath:…回调应该由调用addObserver:…方法的对象实现。