IPhoneアプリケーションに5つのローカル通知を設定し、ユーザーがアプリケーションを削除したとします。アプリが再度インストールされた場合、以前の通知が表示されます。
次のコードはすべての通知を削除することを知っています
[[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
- (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;
}
それが役に立てば幸い!
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"];
}