【问题标题】:How to use KVO to detect when an application gets active?如何使用 KVO 检测应用程序何时激活?
【发布时间】:2012-01-09 04:20:32
【问题描述】:

我在 Cocoa 应用程序中有以下代码:

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

我的目的是在应用程序的状态从非活动变为活动时使用 KVO 来检测它。

我读到我必须使用实例方法-addObserver:forKeyPath:options:context:

然后使用-observeValueForKeyPath:ofObject:change:context:响应变更通知。

我了解-observeValueForKeyPath 是一种回调方法,我可以在其中编写代码来响应我感兴趣的属性更改。

尽管如此,我对必须如何使用 addObserver 方法以便在 runningApplicationsactive 属性更改时收到通知感到困惑。现在,我想知道在哪里进行注册,目前我使用的是-applicationDidFinishLaunching,但不确定是否是正确的注册地点。此外,如果我使用-observeValueForKeyPath 回调方法,我必须在继承自NSObject 的类中实现它,并且与我注册通知的类相同?

【问题讨论】:

    标签: macos key-value-observing nsworkspace nsrunningapplication


    【解决方案1】:
    1. 您应该对runningApplications 数组中的每个对象调用addObserver:… 方法(使用isActive 作为键路径)。

    2. 在您的应用完成启动后开始观察听起来是正确的。就时间而言,就是这样。至于地方,应该有一个单独的课程专门用于这些观察。通过在应用程序委托中直接实现观察代码,您将违反单一职责原则(从长远来看,这意味着令人头疼)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 2018-03-19
      • 2013-10-28
      • 1970-01-01
      • 2011-11-26
      • 2012-03-15
      • 1970-01-01
      相关资源
      最近更新 更多