Как удалить все локальные уведомления при удалении приложения с iPhone
Скажем, я установил 5 локальных уведомлений для приложения iPhone, после чего пользователь удалит приложение. Если приложение установлено снова, оно отображает предыдущие уведомления.
Я знаю, что следующий код удаляет все уведомления
[[UIApplication sharedApplication] cancelAllLocalNotifications];
Но где я могу поместить этот код так, чтобы он выполнялся при удалении приложения?
Или любой другой способ решить эту проблему.
Ответы
Ответ 1
Как отмечали другие, я считаю, что лучший способ добиться этого - иметь флаг в 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;
}
{
Ответ 2
Вот что я сделал:
В 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
}
}
Ответ 4
Вы можете использовать UIPasteboard
для хранения флага как уже упоминавшегося DerekH.
Что-то связать это:
- (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"];
}
Ответ 5
Перейдите в свой appDelegate.m, в функции "didFinishLaunchingWithOptions" добавьте этот код:
application.applicationIconBadgeNumber = 0;