【问题标题】:Have main app open with NSUserNotification posted from helper使用助手发布的 NSUserNotification 打开主应用程序
【发布时间】:2014-05-15 23:55:53
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c macos cocoa nsusernotification nsusernotificationcenter


    【解决方案1】:

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

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

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

    我假设你已经为 NSUserNoticationCenter 设置了 Delegate,所以 用户通知中心: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 dismiss notification.

    【讨论】:

    • 谢谢。我正在使用 userInfo 字典,这就是为什么我希望将它从帮助程序传递到 GUI 应用程序。唉。
    【解决方案2】:

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

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

    【讨论】:

    • 好答案。首先,呃,是的,让助手启动主应用程序,但是然后,你必须传递启动参数或其他东西来传递通知信息。如果我坚持让助手发布通知,我认为 URL 方案是最巧妙的方法。我最终做的是深入研究如何让 GUI 应用程序在关闭时进入后台模式,并通过通知重新启动 GUI。
    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多