2011-02-07 19 views
6

Mi aplicación tiene una función de alarma con UILocalNotification, y funciona muy bien. Sin embargo, si el usuario desinstala la aplicación, luego la REINSTALLA, recibirá todas las notificaciones "intermedias" a la vez.UILocalNotification se dispara después de reinstalar la aplicación

He tratado de llamar:

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

si es la primera vez que se inicia la aplicación, pero no ayuda, ya que la notificación haya sido recibida, incluso antes de la aplicación: didFinishLaunchingWithOptions: se llama.

Esto fue peor en 4.0 cuando la alarma se repitió incluso si el usuario ha eliminado la aplicación, pero al menos ese error fue corregido por Apple en versiones posteriores. Sin embargo, ahora estoy atascado con esto. Alguien tiene una idea?

+0

Hola, ¿consigues alguna solución para este problema ... –

Respuesta

6

Esto es realmente un error en el iPhone. Si eliminó la aplicación e la instaló más tarde también, tendrá la misma identificación de la aplicación, por lo tanto, cuando la aplicación se reinstale, todas las notificaciones locales anteriores se activaron incluso si no abrió la aplicación.

+0

Para usuarios de iOS 4.0, 4.1 ..., ¿piensas que hay alguna solución alternativa? Porque será extremadamente molesto recibir esas alarmas repetidas sin deshabilitarlo (4.0). –

+0

no hay otro ir, es por eso que archivaron un error – KingofBliss

+0

Todavía estoy viendo este comportamiento a partir de 4.3, especialmente cuando se ejecuta (instalación) a través de XCode. – Gregir

15

Según Apple, esto no es un error (he presentado un informe de error). El sistema retiene las UILocalNotifications para aplicaciones desinstaladas durante 24 horas, solo en caso de que el usuario borre la aplicación por accidente, y restaura dichas UILocalNotifications si la aplicación se vuelve a instalar dentro de ese marco de tiempo.

La solución sería eliminar todos los UILocalNotifications en la primera puesta en marcha, así:

- (BOOL)   application: (UIApplication*) application 
didFinishLaunchingWithOptions: (NSDictionary*) launchOptions 
{ 
    if (self.isFirstRun) 
    { 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
    self.firstRun = NO; 
    } 

    /* Other code here */ 
    ... 
} 

por supuesto, poner en práctica su propia firstRun setter y getter a buscar/guardar en un almacenamiento persistente, como NSUserDefaults.

+0

¿Está documentada esta "función" en algún lugar? –

+0

+1 Esto parece bastante estúpido. La aplicación no es propietaria de las notificaciones una vez que se entregan al sistema operativo, lo que es claro cuando intenta programar 65 notificaciones en lugar del máximo de 64. La aplicación debe ser responsable de almacenar su propia representación de lo que signifique la notificación, no confiar en el sistema operativo. Si dicha aplicación se inicia sin conocimiento previo de estas notificaciones, entonces son simplemente basura. – Andreas

Cuestiones relacionadas