1

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

我还希望助手应用程序发布与主应用程序具有相同名称的通知,但这比获取didActivateNotification的问题少:发送到正确的可执行文件。

回答

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。 通过这种方式,您可以定义一个简单的动作/参数语法,在您的主应用程序中触发不同的行为。

+0

很好的答案。首先,是的,有帮助者启动主应用程序,但是,然后,你必须通过启动参数或通过通知信息。如果我坚持让助手发布通知,我认为URL方案是最简单的方法。我最终做的是深入研究如何让GUI应用程序在关闭时进入后台模式,然后用通知重新启动GUI。 – stevesliva

1

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

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

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

我假设您已经为NSUserNoticationCenter设置了委托,因此收到了userNotificationCenter:didActivateNotification: 。 此链接 https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotificationCenterDelegate_Protocol/Reference/Reference.html#jumpTo_3 解释,如何接收和提取的“用户信息”快译通,你可以与信息和应用程式应反应信息馈送的讨论部分,看到这个链接,用户信息 https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotification_Class/Reference/Reference.html#jumpTo_17

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

+0

谢谢。我使用的是userInfo dict,这就是我希望将它从帮助程序提供给GUI应用程序的原因。唉。 – stevesliva

相关问题