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
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>