从助手发布的NSUserNotification打开主应用程序

时间:2014-04-03 21:55:12

标签: objective-c macos cocoa nsusernotification nsusernotificationcenter

我有一个辅助应用程序,当GUI应用程序没有时,它是活动的。帮助应用程序将通知发布到[NSUserNotificationCenter defaultNotificationCenter]。我想在用户激活帮助者的通知时打开GUI应用程序。有没有办法做到这一点?

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

2 个答案:

答案 0 :(得分:1)

您只需通过didActivateNotification:委托方法中的NSWorkspace打开主应用程序:

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

这将在指定的URL处打开应用程序(如果它未运行),或者如果已经打开则将其带到前台。

另一种方法是在主应用中使用register a custom URL scheme,并使用NSWorkspace的openURL。 这样,您就可以定义一个简单的动作/参数语法,在主应用程序中触发不同的行为。

答案 1 :(得分:1)

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

如果您想启动GUI应用程序,可以使用 [[NSWorkspace sharedWorkSpace] launchApplication:pathToApplication]; pathToApplication应该设置正确和完整,例如/ applications / the GUIapp

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

我假设你已经为NSUserNoticationCenter设置了委托,所以 userNotificationCenter:didActivateNotification: 收到了。 这个链接的讨论部分 https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotificationCenterDelegate_Protocol/Reference/Reference.html#jumpTo_3 解释,如何从“userInfo”dict接收和提取信息,您可以使用该信息提供信息,应用程序应作出反应,请参阅userInfo的此链接 https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotification_Class/Reference/Reference.html#jumpTo_17

我没有使用过NSUserNotifications,但也许这也有帮助 NSUserNotificationCenter dismiss notification