2011-02-11 28 views
17

Tengo algunos problemas realmente irritantes con UILocalNotification.UILocalNotification no funciona en absoluto

Mientras terminaba una aplicación que casi he completado, noté que no podía hacer que las notificaciones locales funcionaran, sin importar lo que intentara.

Así que, en lugar de perder el tiempo, decidí volver a lo básico y ver si podía hacer que funcionasen.

he creado una aplicación basada en la nueva vista de XCode, y sustituido -viewDidLoad con esto:

- (void)viewDidLoad 
{ 
    UILocalNotification * theNotification = [[UILocalNotification alloc] init]; 
    theNotification.alertBody = @"Alert text"; 
    theNotification.alertAction = @"Ok"; 
    theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10]; 

    [[UIApplication sharedApplication] scheduleLocalNotification:theNotification]; 
} 

Sin embargo, eso también no hace nada en absoluto.
Esperaba ver una notificación 10 segundos después de iniciar la aplicación, pero no aparece nada.
Además, probé esto tanto en mi iPhone como en el simulador.

¿Me falta algo realmente crucial aquí? (He buscado a través de la documentación de Apple y no pude encontrar nada de por qué esto está ocurriendo)

Gracias

Respuesta

43

UILocalNotification s sólo se muestran de forma automática no si la aplicación es corriendo (o correr en el fondo). Si la aplicación se está ejecutando y se activa una notificación local, se llama al método UIApplicationDelegate y el sistema no muestra nada (ni reproduce ningún sonido). Si desea mostrar la notificación, cree un UIAlertView usted mismo en el método delegado.

+1

perfecto. Muchas gracias. –

+0

Supongo que no hay una forma de cambiar este comportamiento. El centro de notificaciones es una gran manera de mostrar información a mi usuario para eventos de comunicación asíncrona que ocurren mientras la aplicación se está ejecutando. – David

+0

Solo una nota sobre otro tema a tener en cuenta ... si configura el parámetro de zona horaria que afecta cuando la alarma suena como se espera ... sin embargo, si lo configura explícitamente para evitar zonas horarias UTC, puede que no haga lo que podría esperar ya que aún modifica la fecha de aprobación de Firedate desde UTC a UTC pero diferente de alguna manera. Descubrí que la alerta nunca se activó al configurar el parámetro UTC de la zona horaria, por lo que establecer esto de nuevo en cero y garantizar que la hora UTC con hora de incendio sea correcta solucionó el problema. – sradforth

15

Sólo un comentario de mis aventuras personales en la estupidez ...

que tenían el mismo problema, pero mi problema era que me había olvidado de asignar un valor a alertBody. Si no configura alertBody, la notificación no se mostrará.

+0

¡He estado buscando este "error" durante mucho tiempo! ¡Gracias! Esperaría una advertencia al menos, ya que seguramente es un error programar una notificación vacía no visualizable. – Gerard

+1

Felicidad restaurada :) – Ramesh

+0

OMG, @conarch, salvaste mi día :) También soy un tipo de ese tipo :) Gracias por señalarlo. –

13
  1. fireDate debe ser hora futura.
  2. la aplicación debe estar ejecutándose en el fondo o está cerrada.
  3. una cosa más, no se olvide de mostrar la consulta si se permite empujar, a continuación añadir código para AppDelegate:

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) { 
         UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil]; 
         [application registerUserNotificationSettings:settings]; 
        } 
    } 
    
+0

Formatee el código en su respuesta – Anton

+2

No en la [Documentación de Apple] (https://developer.apple.com/library/ios/documentation/iPhone/Reference/UILocalNotification_Class/index.html # // apple_ref/doc/uid/TP40009565-CH1-SW13), he leído que primero necesitaba registrarme para 'UserNotificationSettings' para una aplicación que solo tiene notificaciones locales. Esto me ayudó, por simple que parezca. –

Cuestiones relacionadas