同様の問題があったと思います。アプリがフォアグラウンドに入ったとき、過去の通知をクリアして、通知トレイから古い通知を削除しようとしました。
古い通知を取得して削除するために、次のようなことを行いました。
NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
NSArray *pastNotifications = [activeNotifications filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"firDate < %@", [NSDate date]]];
for (UILocalNotification *notification in pastNotifications) {
[[UIApplication sharedApplication] cancelLocalNotification:notification];
}
ただし、scheduledLocalNotifications
通知センターに表示されていても、すでに発火日が過ぎている場所は含まれていないようです.
電話cancelAllLocalNotifications
をかけると、過去の通知も削除されるようです。したがって、現在のすべての通知を取得し、すべてをキャンセルしてから、まだ関心のある通知を追加し直すことができます。
// Grab all the current notifications
NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
// Clear all notifications to remove old notifications
[[UIApplication sharedApplication] cancelAllLocalNotifications];
// Add back the still relevant notifications
for (UILocalNotification *notification in activeNotifications) {
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
さらに、不要になった通知を追加する前に、通知のフィルタリングを行うことができます。また、アプリがアクティブになったときにアクティブな通知を取得し、それらをインスタンス変数に格納して、アプリが背景