Enviar notificación al centro de notificación de los leones de montaña

¿Alguien puede dar un ejemplo de enviar una notificación de prueba desde una aplicación Cocoa al Centro de notificaciones? p.ej. cuando hago clic en un NSButton

Las notificaciones en Mountain Lion son manejadas por dos clases. NSUserNotification y NSUserNotificationCenter . NSUserNotification es su notificación real, tiene un título, un mensaje, etc. que se puede establecer a través de propiedades. Para entregar una notificación que ha creado, puede usar el método deliverNotification: disponible en NSUserNotificationCenter. Los documentos de Apple tienen información detallada sobre NSUserNotification y NSUserNotificationCenter, pero el código básico para publicar una notificación es el siguiente:

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

Eso producirá una notificación con un título, un mensaje y que reproducirá el sonido predeterminado cuando se muestre. Hay mucho más que puede hacer con las notificaciones que solo esto (como las notificaciones de progtwigción) y eso se detalla en la documentación a la que me he vinculado.

Un pequeño punto, las notificaciones solo se mostrarán cuando su aplicación sea la aplicación clave. Si desea que sus notificaciones se muestren independientemente de si su aplicación es clave o no, deberá especificar un delegado para NSUserNotificationCenter y anular el método de delegado userNotificationCenter:shouldPresentNotification: para que devuelva YES. La documentación para NSUserNotificationCenterDelegate se puede encontrar aquí

Aquí hay un ejemplo de cómo proporcionar un delegado a NSUserNotificationCenter y luego forzar que las notificaciones se muestren independientemente de si su aplicación es clave. En el archivo AppDelegate.m de su aplicación, edítelo así:

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; } - (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{ return YES; } 

Y en AppDelegate.h, declare que la clase se ajusta al protocolo NSUserNotificationCenterDelegate:

 @interface AppDelegate : NSObject