2012-02-14 2 views
29

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

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

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

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

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

+4

Не мог бы вы не удалите его при первом запуске вместо этого? Например, если определенный флаг в UserSettings не установлен, вы отменяете их все и устанавливаете флаг? –

+0

В этом приложении я использую базу данных для хранения и извлечения объекта уведомления также –

+0

Neon .. это помогает? http://stackoverflow.com/questions/12369900/when-i-delete-my-ios-application-push-notification-state-remains – pordi

ответ

31

Как уже упоминалось, я думаю, что лучший способ сделать это, чтобы иметь флаг в 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; 
    } 
{ 
+0

Не удаляются ли локальные уведомления автоматически, если приложение удалено? Я не понимаю, почему они должны быть восстановлены из новой установки приложения? – Supertecnoboff

+1

Я считаю, что они сохраняются в течение определенного периода времени, если приложение переустановлено. Я отправлю документацию, если найду ее. – DerekH

+0

Нет при удалении Уведомления не очищаются. Я создал приложение, и я планирую некоторые локальные уведомления. Затем я удалил приложение и установил его снова, но уведомления продолжали поступать (на этот раз не было реализации для локальных уведомлений).Вот почему я считаю, что они сохранены, но я не уверен в этой длительности (сохраняю) –

-7

Перейти к вашей appDelegate.m, в функции «didFinishLaunchingWithOptions» добавить этот код:

application.applicationIconBadgeNumber = 0; 
+1

Я не хочу удалять локальное уведомление, а не значок. –

0

Вы можете использовать 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"]; 
} 
3

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

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

Надеется, что это помогает!

3

Для быстрой 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 
    } 
} 
+0

Этот код предназначен для> = iOS 10 –

Смежные вопросы