Отображать NSUserNotification, когда приложение активно

В настоящее время я делаю приложение строки меню 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")

Уведомление работает, когда приложение панели меню скрыто (не отображается), однако, когда оно отображается пользователю, уведомление не отображается.

Есть ли способ показать уведомление во время просмотра приложения?


person iProgram    schedule 03.11.2015    source источник
comment
FWIW: ваш код не является неправильным, я только что проверил его на игровой площадке, и он сработал.   -  person Eric Aya    schedule 03.11.2015
comment
@ЭрикД. Тогда почему в Playground работает (у меня тоже работало), а не в самом приложении? Версия applescript работает нормально, значит логика тоже правильная?   -  person iProgram    schedule 03.11.2015
comment
Добавьте в эту функцию оператор печати или, лучше, сделайте точку останова, чтобы проверить, действительно ли она вызывается в вашем приложении. Я бы сказал, что ошибка не в коде вашего вопроса, а в другом месте вашего приложения.   -  person Eric Aya    schedule 03.11.2015
comment
@ЭрикД. Логика работает, NSLog показывает тест как надо   -  person iProgram    schedule 03.11.2015
comment
@ЭрикД. Новая проблема, посмотрите на редактирование   -  person iProgram    schedule 03.11.2015
comment
Из документы: The user notification center reserves the right to decide if a delivered user notification is presented to the user. For example, it may suppress the notification if the application is already frontmost (the delegate can override this action).   -  person Eric Aya    schedule 03.11.2015
comment
@ЭрикД. Давайте продолжим обсуждение в чате.   -  person iProgram    schedule 03.11.2015


Ответы (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
    }
}
person Jeremy Vizzini    schedule 04.11.2015