Dismiss an already delivered UILocalNotification?

ios, uiapplication, uilocalnotification

Solution

You can solve this by adding your newly created notifications to your own `NSMutableArray` of notifications and check that array instead of `app.scheduledLocalNotifications`. Something like this:

Add a `NSMutableArray` to your Viewcontrollers .h file:

NSMutableArray *currentNotifications;

Initiate it when initiating your ViewController

currentNotifications = [[NSMutableArray alloc] init];

When initiating a notification, also add it to your array:

UILocalNotification *notification = [[UILocalNotification alloc] init];
...
[currentNotifications addObject:notification];
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];

Later when you want to cancel that notification, look for it in your array instead. Also remove it from your array:

for (UILocalNotification *notification in currentNotifications) {
    if (someCondition) {
        [[UIApplication sharedApplication] cancelLocalNotification:notification];
        [currentNotifications removeObject:notification];
    }
}

Problem

Is it possible to do this? `UIApplication's` `scheduledLocalNotifications` doesn't seem to return notifications that have already been delivered to the user's notification center, so I think this may be by design, but I can't find any documented evidence of this. Anyone know? Thanks! EDIT: Found this: You can cancel a specific scheduled notification by calling cancelLocalNotification: on the application object, and you can cancel all scheduled notifications by calling cancelAllLocalNotifications. Both of these methods also programmatically dismiss a currently Here: http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html However, how do I get a reference to an already-delivered notification, if `scheduledLocalNotifications` doesn't give me notifications that have already been delivered? EDIT 2: Here's what I'm trying to do, after I've registered some notifications: ``` UIApplication *app = [UIApplication sharedApplication]; for (UILocalNotification *localNotification in app.scheduledLocalNotifications) { if (someCondition) { [app cancelLocalNotification:localNotification]; } } } ``` The problem is that once they're delivered, they're no longer in 'scheduledLocalNotifications'.

Original source

Related problems