2012-08-05 10 views

Respuesta

148

Las notificaciones en Mountain Lion se manejan en dos clases. NSUserNotification y NSUserNotificationCenter. NSUserNotification es su notificación actual, 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 han detallado información sobre NSUserNotification & NSUserNotificationCenter pero el código básico para publicar una notificación se parece a esto:

- (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 va a producir una notificación con un título, un mensaje y que va a reproducir el sonido por defecto cuando se muestra. Hay mucho más que puede hacer con las notificaciones que solo esto (como las notificaciones de programació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 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 delegado userNotificationCenter:shouldPresentNotification: para que devuelva SÍ. Puede encontrar la documentación para NSUserNotificationCenterDelegatehere

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, editarlo como esto:

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

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

Y en AppDelegate.h, declaran que la clase cumpla con el protocolo NSUserNotificationCenterDelegate:

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate> 
+0

¿Puede elaborar sobre cómo anular userNotificationCenter ? (lo siento, soy realmente nuevo en esto :)) – haseo98

+3

@ haseo98 Sí, acabo de agregar un ejemplo a mi respuesta. – alexjohnj

+0

Estoy obteniendo un error al lado de la aplicación applicationididishlaunching sección del método, Enviar 'AppDelegate * const __strong' al parámetro de tipo incompatible 'id '. ¿Algunas ideas? – haseo98

Cuestiones relacionadas