Как удалить все локальные уведомления при удалении приложения с iPhone - PullRequest
29 голосов
/ 14 февраля 2012

Допустим, я установил 5 локальных уведомлений для приложения iPhone, затем пользователь удаляет приложение.Если приложение установлено снова, оно показывает предыдущие уведомления.

Я знаю, что следующий код удаляет все уведомления

[[UIApplication sharedApplication] cancelAllLocalNotifications];

Но куда я помещаю этот код, чтобы он выполнялся, когда приложение

Или любым другим способом решения этой проблемы.

Ответы [ 5 ]

31 голосов
/ 25 октября 2013

Как уже упоминали другие, я думаю, что лучший способ сделать это - иметь флаг в didFinishLaunchingWithOptions в делегате приложения, который проверяет, является ли это первым запуском или нет.

Если приложение запускается в первый раз, вы можете позвонить

[[UIApplication sharedApplication] cancelAllLocalNotifications];

Это отменит любые существующие уведомления.

Например:

- (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;
    }
{
3 голосов
/ 03 февраля 2017

Для Swift 3.0 вы можете использовать

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

Затем добавьте этот метод, чтобы проверить, является ли это первым запуском

var isFirstLaunch: Bool {
    get {
        if     (NSUserDefaults.standardUserDefaults().objectForKey("firstLaunchDate") == nil) {
            NSUserDefaults.standardUserDefaults().setObject(NSDate(),     forKey: "firstLaunchDate")
            NSUserDefaults.standardUserDefaults().synchronize()
            return true
        }
        return false
    }
}
3 голосов
/ 17 июня 2015

Вот что я сделал:

В вашем 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;
}

Надеюсь, это поможет!

0 голосов
/ 14 мая 2015

Вы можете использовать UIPasteboard для хранения флага, как уже упоминал ДерекХ.
Что-то связать это:

- (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"];
}
0 голосов
/ 04 ноября 2012

Зайдите в ваше приложение Delegate.m, в функцию «didFinishLaunchingWithOptions» добавьте этот код:

application.applicationIconBadgeNumber = 0;
...