objective-c - NSRunningApplication 'terminated' 不可观察

标签 objective-c cocoa macos

我正在构建一个启动另一个程序的程序,然后应该对其进行监视,并在它终止时采取措施。当应用程序启动时,我可以从 NSWorkspace 获取 NSRunningApplication 的实例。

现在,文档指出 NSRunningApplication 具有键值可观察的属性“终止”。我试过实现:

[browserInstance addObserver:self 
                          forKeyPath:@"terminated"
                             options:NSKeyValueObservingOptionNew
                             context:NULL];

和:

- (void)observeValueForKeyPath:(NSString *)keyPath 
                      ofObject:(id)object 
                        change:(NSDictionary *)change
                       context:(void *)context  
{  

        NSLog(@"observeValueForKeyPath");  
        if ([keyPath isEqual:@"terminated"])  
        {  
            NSLog(@"terminated");  
        }  
} 

但我从未见过 observeValueForKeyPath 方法被触发。如果可能的话,有谁知道如何进行这项工作?我无法在网上的任何地方找到任何具体示例。

最佳答案

你试过keyPath“isTerminated”吗?

文档中关于 NSRunningApplication 的通知,属性 terminated 指定 getter isTerminated,而不是默认的 getter terminated。 (这是有道理的,因为 bool 属性是"is"或“不是”)

这表明 obj-c 属性解析中可能存在错误,其中 getter 的名称用于 KVO 路径。

关于objective-c - NSRunningApplication 'terminated' 不可观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4128002/

相关文章:

objective-c - 没有主详细信息模板的核心数据

objective-c - 从 Objective-C 中的 bz2 文件读取日志文件

macos - OSX X11 错误无法打开显示

objective-c - 在 block 内使用 self 的方法

objective-c - 如何在 Objective C 中获取随机 unicode 字符

iphone - 什么情况下[ [ UIApplication sharedApplication ] keyWindow ]会返回nil?

swift - macOS 中 NSUserNotification 和 UNUserNotification 有什么区别?

ios - 我可以使用 NSUbiquitousKeyValueStore 在 Mac 和 iOS 之间同步吗?

ios - Razorpay 签名和订单 ID 未进入 onPaymentSuccess 的成功方法

iphone - Facebook iPhone应用登录效果