web-dev-qa-db-fra.com

Envoyer une notification au centre de notification Mountain Lion

Quelqu'un peut-il donner un exemple d'envoi d'une notification de test d'une application Cocoa au Centre de notifications? par exemple. quand je clique sur un NSButton

56
haseo98

Les notifications dans Mountain Lion sont gérées par deux classes. NSUserNotification et NSUserNotificationCenter. NSUserNotification est votre notification actuelle, elle a un titre, un message, etc. qui peut être défini via les propriétés. Pour envoyer une notification que vous avez créée, vous pouvez utiliser le deliverNotification: méthode disponible dans NSUserNotificationCenter. Les documents Apple Apple contiennent des informations détaillées sur NSUserNotification & NSUserNotificationCenter mais le code de base pour publier une notification ressemble à ceci:

- (IBAction)showNotification:(id)sender{
    NSUserNotification *notification = [[NSUserNotification alloc] init];
    notification.title = @"Hello, World!";
    notification.informativeText = @"A notification";
    notification.soundName = NSUserNotificationDefaultSoundName;

    [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
    [notification release];
}

Cela produira une notification avec un titre, un message et jouera le son par défaut lorsqu'il sera affiché. Il y a beaucoup plus que vous pouvez faire avec les notifications que cela (comme la planification des notifications) et tout cela est détaillé dans la documentation à laquelle j'ai lié.

Un petit point, les notifications ne seront affichées que lorsque votre application est l'application clé. Si vous souhaitez que vos notifications s'affichent, que votre application soit clé ou non, vous devrez spécifier un délégué pour NSUserNotificationCenter et remplacer la méthode déléguée userNotificationCenter:shouldPresentNotification: pour qu'il renvoie OUI. La documentation de NSUserNotificationCenterDelegate peut être trouvée ici

Voici un exemple de fourniture d'un délégué à NSUserNotificationCenter, puis de forcer l'affichage des notifications, que votre application soit la clé ou non. Dans le fichier AppDelegate.m de votre application, modifiez-le comme suit:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
}

- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{
    return YES;
}

Et dans AppDelegate.h, déclarez que la classe est conforme au protocole NSUserNotificationCenterDelegate:

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate>
152
alexjohnj