2012-07-31 12 views
10

Investigué mucho pero no pude encontrar lo que estoy buscando: Actualmente, tanto Deployment Target como Base SDK de mi aplicación están configurados en 10.8, y funcionan perfectamente. ¡Puedo publicar correctamente las notificaciones en el nuevo Centro de notificaciones de Mountain Lions!¿Cómo crear una aplicación que se ejecuta en Mac OS 10.6 y es compatible con NSUserNotificationCenter?

Para crear una aplicación que también se ejecute en Mac OS 10.6, configuré el objetivo de despliegue en 10.6 y lo construí (as recommended in this thread). Desafortunadamente, la aplicación se bloquea en 10.6, y el informe de fallos detalla que NSUserNotificationCenter no se pudo encontrar (No se maneja la versión de SO).

-

Entonces, lo que sin duda tengo que hacer, es comprobar, si existe la clase NSUserNotificationCenter:

notificationCenterIsAvailable = (NSClassFromString(@"NSUserNotificationCenter")!=nil); 

y operar basada en este indicador booleano.

Pero ¿qué pasa con el código que no puede basarse en esta bandera, como:

  • la interfaz ..: <NSUserNotificationCenterDelegate> {
  • o el tipo de la referencia al Centro de Notificación: NSUserNotificationCenter *center en las propiedades de clase?

Mi primer pensamiento fue para alterar dinámicamente la cabecera de la clase en tiempo de ejecución, es decir, añadir los métodos y propiedades para manejar el Centro Notificaion en función de si existe la clase o no, pero esto parece muy compleja?!

Respuesta

3

Esos son problemas de compilación y estarán bien todo el tiempo que el SDK base sea 10.8. El puntero center puede permanecer en nil si NSUserNotificationCenter no existe y, por lo tanto, podría usarlo como indicador para verificar si está haciendo las notificaciones o no en el código ejecutado después de la prueba.

EDIT De hecho, dejándolo nil significará que ni siquiera necesita comprobarlo; solo envíe mensajes de forma normal y se ignorarán si el puntero es nil (esto es a menos que la creación del mensaje sea costosa y desee guardar algunos ciclos de la CPU).

+0

Así que incluso los métodos delegados como 'userNotificationCenter: (NSUserNotificationCenter *) center shouldPresentNotification:' y '(void) userNotificationCenter: (NSUserNotificationCenter *) center didActivateNotification:' están siendo borrados por el compilador automáticamente? – Raffael

+0

@ Raffael No se conserva el código, sin embargo, no se usarán. – trojanfoe

+0

¡Está funcionando, gracias! El accidente reciente debe haber tenido otra razón. – Raffael

Cuestiones relacionadas