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