【问题标题】:Display NSUserNotification when app is active应用程序处于活动状态时显示 NSUserNotification
【发布时间】:2016-02-04 00:41:27
【问题描述】:

我目前正在制作一个使用此代码显示通知的 XIB 菜单栏应用程序:

func showNotification(message:String, title:String = "App Name") -> Void {
    let notification = NSUserNotification()
    notification.title = title
    notification.informativeText = message
    NSUserNotificationCenter.defaultUserNotificationCenter().deliverNotification(notification)
}

这样称呼它:

showNotification("\(song)\n\(artist)",title: "Now Playing")

当菜单栏应用程序被隐藏(未显示)时通知有效,但是当用户显示它时,通知不会显示。

有没有办法在应用程序处于视图中时显示通知?

【问题讨论】:

  • FWIW:您的代码没有错,我刚刚在 Playground 中进行了测试,并且可以正常工作。
  • @EricD。那么为什么它在 Playground 中工作(也为我工作),而不是应用程序本身? applescript 版本运行正常,这说明逻辑做的太对了?
  • 在这个函数中添加一个打印语句——或者更好的是,创建一个断点——以检查它是否在你的应用程序中被实际调用。我想说这个错误不在于您问题中的代码,而是您的应用程序的其他地方。
  • @EricD。逻辑有效,NSLog 正在显示“测试”,就像它应该做的那样
  • @EricD。新问题,看编辑

标签: swift macos cocoa swift2 nsusernotificationcenter


【解决方案1】:

默认情况下,当您的应用程序处于活动状态时,您的应用程序发送的通知不会显示。要获得预期的行为,您必须使用如下的用户通知中心委托:

extension AppController: NSUserNotificationCenterDelegate {

    private func setupUserNotificationCenter() {
        let nc = NSUserNotificationCenter.defaultUserNotificationCenter()
        nc.delegate = self
    }

    public func userNotificationCenter(center: NSUserNotificationCenter, shouldPresentNotification notification: NSUserNotification) -> Bool {
        return true
    }
}

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 2011-06-11
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多