【问题标题】:Add observer for a process in Cocoa为 Cocoa 中的进程添加观察者
【发布时间】:2012-12-10 05:35:03
【问题描述】:

我正在为 iTunes 开发一种插件。

很多用户都要求,如果他们启动 iTunes,他们希望启动插件,这当然是有道理的。但是,我不确定如何执行此操作。

我想到了一个帮助应用程序,这可能是唯一的方法。 唯一困扰我的是如何获得通知。 当然,我可以一直检查 iTunes 是否正在运行,但我不确定这是否是正确的方法。

我宁愿将我的应用程序添加为该过程的观察者。 这可能吗?

如果没有,活动监视器是如何做到的?


解决方案

感谢 Daij-Djan!我让它像这样工作:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                                           selector:@selector(iTunesLaunched:)
                                                               name:NSWorkspaceDidLaunchApplicationNotification
                                                             object:nil];

    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                                           selector:@selector(iTunesTerminated:)
                                                               name:NSWorkspaceDidTerminateApplicationNotification
                                                             object:nil];
}

-(void) iTunesLaunched:(NSNotification *)notification {
    NSRunningApplication *runApp = [[notification userInfo] valueForKey:@"NSWorkspaceApplicationKey"];
    if ([runApp.bundleIdentifier isEqualToString:@"com.apple.iTunes"])
        NSLog(@"start");

}

-(void) iTunesTerminated:(NSNotification *)notification {
    NSRunningApplication *runApp = [[notification userInfo] valueForKey:@"NSWorkspaceApplicationKey"];
    if ([runApp.bundleIdentifier isEqualToString:@"com.apple.iTunes"])
        NSLog(@"terminate");

}

【问题讨论】:

  • 您想在 iTunes 启动时启动您的应用程序吗?还是您的流程之前已经在运行?
  • @NikolaiRuhe 这取决于。用户应该能够同时做到这两点。

标签: objective-c macos cocoa itunes observer-pattern


【解决方案1】:

注册 NSWorkspace 通知:
NSWorkspaceDidLaunchApplicationNotification
NSWorkspaceDidTerminateApplicationNotification

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html


也有可能对 runningApplications 属性进行 KVO
顺便说一句,cocoatech 有一个很好的 NTRunningAppManager 类,可以做到这一点

【讨论】:

  • 我喜欢让问题再打开一两个小时,因为这有时会带来更多的投票;)
猜你喜欢
  • 2011-12-10
  • 2011-12-11
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多