2015-11-03 1 views
1

Je fais actuellement une application barre de menus XIB qui affiche une notification à l'aide de ce code:NSUserNotification d'affichage lorsque l'application est active

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

et de l'appeler comme ceci:

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

La notification fonctionne lorsque l'application Barre de menus est cachée (non montrée), cependant quand l'utilisateur l'a montrée, la notification ne montre pas.

Existe-t-il un moyen d'afficher la notification lorsque l'application est en vue?

+0

FWIW: votre code n'est pas faux, je viens de tester dans un Playground et cela a fonctionné. – Moritz

+0

@EricD. Alors pourquoi travaille-t-il dans le Playground (a travaillé pour moi aussi), mais pas l'application elle-même? La version de l'applescript fonctionne très bien, cela signifie que la logique le fait aussi? – iProgram

+0

Ajoutez une instruction d'impression - ou mieux, créez un point d'arrêt - dans cette fonction pour vérifier si elle est effectivement appelée dans votre application. Je dirais que le bug n'est pas avec le code dans votre question mais ailleurs dans votre application. – Moritz

Répondre

0

Par défaut lorsque votre application est active, les notifications fournies par votre application ne sont pas affichées. Pour obtenir le comportement attendu, vous devez utiliser le délégué du centre de notification utilisateur comme ci-dessous:

extension AppController: NSUserNotificationCenterDelegate { 

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

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