2011-02-07 9 views
6

La mia applicazione ha una funzione di allarme utilizzando UILocalNotification, e funziona benissimo. Tuttavia, se l'utente disinstalla l'app, in seguito REINSTALLA, riceverà tutte le notifiche intermedie in una sola volta.incendi UILocalNotification dopo reinstallare l'app

Ho provato a chiamare:

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

se è la prima volta che viene lanciata l'applicazione, ma non aiuta, perché la notifica viene ricevuto anche prima applicazione: didFinishLaunchingWithOptions: si chiama.

Era peggio in 4,0 quando l'allarme è stato ripetuto anche se l'utente ha cancellato l'applicazione, ma almeno questo bug è stato fissato da Apple nel release successiva. Comunque ora sono bloccato con questo. Qualcuno ha un'idea?

+0

Ciao, non si ottiene alcuna soluzione per questo problema ... –

risposta

6

Questo è in realtà un bug in iPhone. Se hai rimosso l'applicazione e l'hai installata in un secondo momento, avrà lo stesso ID app, quindi quando l'applicazione viene reinstallata tutte le notifiche locali passate sono state attivate anche se non avevi aperto l'app.

+0

Per gli utenti di iOS 4.0, 4.1 ..., pensi che ci sono soluzioni alternative? Perché sarà estremamente fastidioso ricevere quegli allarmi ripetuti senza comunque disabilitarli (4.0). –

+0

non c'è nessun altro andare, ecco perché hanno presentato un bug – KingofBliss

+0

sto ancora vedendo questo comportamento come di 4.3, in particolare durante l'esecuzione (installazione) tramite XCode. – Gregir

15

Secondo Apple, questo non è un bug (ho presentato un bug report). Il sistema mantiene le UILocalNotifications per le app disinstallate per 24 ore nel caso in cui l'utente abbia eliminato l'app per sbaglio e ripristina dette UILocalNotifications se l'app viene reinstallata entro quel periodo di tempo.

La soluzione sarebbe quella di rimuovere tutte le UILocalNotifications al primo avvio, in questo modo:

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

    /* Other code here */ 
    ... 
} 

naturalmente, implementare il proprio firstRun setter e getter per recuperare/salvare in memoria persistente, come NSUserDefaults.

+0

Questa "funzione" è documentata ovunque? –

+0

+1 Questo sembra piuttosto stupido. L'app non possiede le notifiche una volta che sono state consegnate al sistema operativo, il che è chiaro quando si tenta di programmare 65 notifiche invece del massimo di 64. L'app dovrebbe essere responsabile della memorizzazione della propria rappresentazione di qualunque cosa significhi la notifica - non fare affidamento sul sistema operativo.Se tale app si avvia senza alcuna conoscenza precedente di queste notifiche, allora sono solo spazzatura. – Andreas

Problemi correlati