斯威夫特& NSUserNotification - 没有横幅或警报,但会以静默方式添加到通知列表中

时间:2014-08-14 08:15:08

标签: notifications swift nsnotificationcenter silent nsusernotification

我正在学习Swift并希望将简单的用户通知显示为测试 我的构建成功,但没有显示横幅,而是将通知静默添加到通知列表中。我已经验证了“请勿打扰”'关闭了,我在AppleScript中尝试了同样的功能,并且在使用NSUserNotificationAlertStyle和我的应用程序的info.plist中的代码时,我尝试了一次成功的非静音警报(不是横幅)。登记/> 但是,这只发生过一次。

我创建了一个新项目,包含Swift文件和没有故事板。我的AppDelegate.swift包含

import Cocoa

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!


    func applicationDidFinishLaunching(aNotification: NSNotification?) {
        var notification:NSUserNotification = NSUserNotification()
        notification.title = "Title"
        notification.subtitle = "Subtitle"
        notification.informativeText = "Informative text"

        notification.soundName = NSUserNotificationDefaultSoundName

        notification.deliveryDate = NSDate(timeIntervalSinceNow: 5)
        var notificationcenter:NSUserNotificationCenter = NSUserNotificationCenter.defaultUserNotificationCenter()
        if let notificationCenter = NSUserNotificationCenter.defaultUserNotificationCenter() {
            notificationcenter.scheduleNotification(notification)
        }
    }

    func applicationWillTerminate(aNotification: NSNotification?) {
        // Insert code here to tear down your application
    }


}

我的info.plist不包含前面提到的NSUserNotificationAlertStyle,因为我不相信横幅广告是必要的。

最后,是的,申请"测试" (因为我已经命名的那个)被设置为显示横幅,因此。 screenshot of Notifications System Panel
总结:我的应用程序成功发出通知,这些通知将添加到通知列表中,但不会显示为横幅。 (我使用的是OS X Yosemite 10.10。我希望这个问题与测试版无关)

1 个答案:

答案 0 :(得分:21)

如果应用程序是通知发送时的前台/活动应用程序,则不会显示某些通知。有关详细信息,请参阅NSUserNotification's presented property

例如,当您在iTunes中并且新歌开始播放时,您已经看到正在播放的歌曲,并且不需要显示横幅。

请注意,在providing a delegate to NSUserNotificationCenter发送通知(并检查presented)后,您仍然可以收到通知,包括通过实施userNotificationCenter:shouldPresentNotification:来覆盖演示行为。