IOS 5通知センターからアプリが作成した古い通知を削除したいと思います。これはできますか?もしそうなら、どのように?
通知センターから通知を削除するには、アイコンバッジ番号をゼロに設定するだけです。
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
これは番号が変更された場合にのみ機能するため、アプリがバッジ番号を使用しない場合は、最初に設定してからリセットする必要があります。
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
私が使用する(バッジを必要としない)より簡単な方法は、次のように、スケジュールされたローカル通知の配列をそれ自体にリセットすることです。
UIApplication* application = [UIApplication sharedApplication];
NSArray* scheduledNotifications = [NSArray arrayWithArray:application.scheduledLocalNotifications];
application.scheduledLocalNotifications = scheduledNotifications;
これは、通知センターに存在するすべての「古い」通知が削除される一方で、スケジュールされた通知はすべて有効のままになるという効果があります。ただし、この動作に関するドキュメントはまだ見ていませんので、iOSの将来のリリースで変更される可能性があります。
もちろん、all通知を削除する場合は、次のようになります。
[[UIApplication sharedApplication] cancelAllLocalNotifications];
SwiftおよびiOS 10.0で通知を消去する場合
import UserNotifications
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled.
center.removeAllDeliveredNotifications() // To remove all delivered notifications
}
私にとっては、次のようなバッジのみでローカル通知を送信することでのみ機能しました:
if([UIApplication sharedApplication].applicationIconBadgeNumber == 0) {
UILocalNotification *singleLocalPush = [[UILocalNotification alloc] init];
singleLocalPush.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
singleLocalPush.hasAction = NO;
singleLocalPush.applicationIconBadgeNumber = 1;
[[UIApplication sharedApplication] scheduleLocalNotification:singleLocalPush];
[singleLocalPush release];
} else {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
そしてメソッドで
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
バッジを再び0に設定できます。