1

我有一个辅助应用程序,当 GUI 应用程序不可用时它处于活动状态。助手应用程序正在向 [NSUserNotificationCenter defaultNotificationCenter] 发布通知。当用户激活来自助手的通知时,我希望打开 GUI 应用程序。有没有办法做到这一点?

我还希望帮助应用程序发布与主应用程序同名的通知,但这比将 didActivateNotification: 发送到正确的可执行文件更不是问题。

4

2 回答 2

1

您可以简单地通过委托方法中的NSWorkspace打开您的主应用程序didActivateNotification:

- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification
{
    [[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL fileURLWithPath:@"/Applications/TextEdit.app"] options:0 configuration:nil error:nil];
}

如果应用程序没有运行,这将在指定的 URL 处打开应用程序,如果应用程序已经打开,则将其置于前台。

另一种方法是在您的主应用程序中注册自定义 URL 方案,并使用 NSWorkspace 的 openURL。通过这种方式,您可以定义一个简单的动作/参数语法,在您的主应用程序中触发不同的行为。

于 2014-04-04T08:50:06.527 回答
1

发布通知仅适用于已注册接收这些通知的正在运行的应用程序。

如果你想启动你的 GUI 应用,你可以使用 [ [ NSWorkspace sharedWorkSpace] launchApplication: pathToApplication]; pathToApplication 应设置正确且完整,例如 /applications/the GUIapp

该方法必须在您的帮助应用程序中实现,因此对用户激活的反应也必须在那里实现。

我假设您已经为 NSUserNoticationCenter 设置了 Delegate,因此会收到 userNotificationCenter:didActivateNotification:。此链接的讨论部分 https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotificationCenterDelegate_Protocol/Reference/Reference.html#jumpTo_3 解释了如何从“userInfo”字典中接收和提取信息,您可以提供信息,哪个应用程序应做出反应,请参阅此链接以获取 userInfo https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotification_Class/Reference/Reference.html#jumpTo_17

我没有使用 NSUserNotifications 但也许这也有助于 NSUserNotificationCenter 解除通知

于 2014-04-04T08:54:06.473 回答