unmutablenotificationcontent permission objective notification objective-c iphone xcode uilocalnotification

objective c - permission - Cómo eliminar todas las notificaciones locales cuando una aplicación se elimina de un iPhone



unmutablenotificationcontent badge (5)

Digamos que configuro 5 notificaciones locales para una aplicación de iPhone, luego el usuario borra la aplicación. Si la aplicación se instala de nuevo, muestra las notificaciones anteriores.

Sé que el siguiente código borra todas las notificaciones

[[UIApplication sharedApplication] cancelAllLocalNotifications];

¿Pero dónde coloco ese código para que se ejecute cuando se elimine la aplicación?

O cualquier otra forma de resolver este problema.


Como han mencionado otros, creo que la mejor manera de lograr esto es tener una marca en didFinishLaunchingWithOptions en el delegado de la aplicación que verifica si es el primer lanzamiento o no.

Si la aplicación se inicia por primera vez, puede llamar

[[UIApplication sharedApplication] cancelAllLocalNotifications];

Esto cancelará cualquier notificación existente.

Por ejemplo:

- (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; } {


Esto es lo que hice:

En tu 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; }

¡Espero eso ayude!


Para Swift 3.0 puedes usar

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

Luego agregue este método para verificar si esta es la primera ejecución

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


Puede usar UIPasteboard para almacenar una bandera como DerekH ya mencionó.
Algo vincula esto:

- (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"]; }


Vaya a su appDelegate.m, en la función «didFinishLaunchingWithOptions» agregue este código:

application.applicationIconBadgeNumber = 0;