2012-02-14 12 views
29

Diciamo che ho impostato 5 notifiche locali per un'applicazione iPhone, quindi l'utente elimina l'app. Se l'app viene nuovamente installata, mostra le notifiche precedenti.Come eliminare tutte le notifiche locali quando un'applicazione viene cancellata da un iPhone

So che il seguente codice elimina tutte le notifiche

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

Ma dove ho messo quel codice in modo che viene eseguito quando l'applicazione viene eliminata?

O in qualsiasi altro modo per risolvere questo problema.

+4

Potrebbe non eliminarlo al primo avvio, invece? Ad esempio se un determinato flag in UserSettings non è impostato, li annulli tutti e imposti il ​​flag? –

+0

In questa applicazione utilizzo il database per la memorizzazione e la ricezione dell'oggetto di notifica anche –

+0

Neon .. questo aiuta? http://stackoverflow.com/questions/12369900/when-i-delete-my-ios-application-push-notification-state-remains – pordi

risposta

31

Come altri hanno detto, penso che il modo migliore per raggiungere questo obiettivo è quello di avere una bandiera in didFinishLaunchingWithOptions in il delegato dell'applicazione che controlla se è il primo avvio o meno.

Se l'applicazione è in fase di lancio per la prima volta, è possibile chiamare

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

Ciò annullare eventuali notifiche esistenti.

Ad esempio:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

    // this flag will need to be stored somewhere non-volatile such as using CoreData 
    // or user defaults 
    if(flag == nil || [flag count] ==0){ 

     [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

     // update your flag so that it fails this check on any subsequent launches 
     flag = 1; 
    } 
{ 
+0

Le notifiche locali non vengono cancellate automaticamente se un'app viene cancellata? Non vedo perché dovrebbero essere reintegrati in una nuova installazione di app? – Supertecnoboff

+1

Credo che vengano conservati per un certo periodo di tempo nel caso in cui l'applicazione venga reinstallata. Pubblicherò la documentazione se riesco a trovarla. – DerekH

+0

Nessuna cancellazione Le notifiche non vengono cancellate. Ho creato un'applicazione e pianifico alcune notifiche locali. Poi ho cancellato l'app e reinstallato, ma le notifiche continuavano a venire (questa volta senza implementazione per le notifiche locali).Questo è il motivo per cui ritengo che siano stati mantenuti, ma non sono sicuro di questa (mantenimento) durata –

-7

Vai al tuo appDelegate.m, in funzione «didFinishLaunchingWithOptions» aggiungere questo codice:

application.applicationIconBadgeNumber = 0; 
+1

Non voglio eliminare la notifica locale piuttosto che il badge. –

0

È possibile utilizzare UIPasteboard per memorizzare una bandiera come Derekh già accennato.
Qualcosa link this:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    if ([self mustCancelNotifications]) { 
     [application cancelAllLocalNotifications]; 
     [self removeTag]; 
    } else { 
     // Set your local notifications 
     [self setFlag]; 
    } 

    //... 

    // Override point for customization after application launch. 
    return YES; 
} 

- (BOOL)mustCancelNotifications 
{ 
    UIPasteboard *past = [UIPasteboard generalPasteboard]; 
    NSString *s = [past valueForPasteboardType:@"my_app_local_notifications"]; 
    if (s) { 
     return YES; 
    } 
    return NO; 
} 

- (void)setFlag 
{ 
    UIPasteboard *past = [UIPasteboard generalPasteboard]; 
    [past setValue:@"dummy" forPasteboardType:@"my_app_local_notifications"]; 
} 

- (void)removeFlag 
{ 
    UIPasteboard *past = [UIPasteboard generalPasteboard]; 
    [past setData:nil forPasteboardType:@"my_app_local_notifications"]; 
} 
3

Ecco quello che ho fatto:

In Your AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    //Check if its first time 
    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"is_first_time"]) { 
     [application cancelAllLocalNotifications]; // Restart the Local Notifications list 
     [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:@"is_first_time"]; 
    } 

    return YES; 
} 

Speranza che aiuta!

3

per SWIFT 3.0 è possibile utilizzare

if (isFirstLaunch){ 
    UNUserNotificationCenter.current().removeAllPendingNotificationRequests() 
} 

Quindi aggiungere questo metodo per verificare se questa è la prima esecuzione

var isFirstLaunch: Bool { 
    get { 
     if  (NSUserDefaults.standardUserDefaults().objectForKey("firstLaunchDate") == nil) { 
      NSUserDefaults.standardUserDefaults().setObject(NSDate(),  forKey: "firstLaunchDate") 
      NSUserDefaults.standardUserDefaults().synchronize() 
      return true 
     } 
     return false 
    } 
} 
+0

Nota, questo codice è per> = iOS 10 –

Problemi correlati