My solution is to use the UILocalNotification
userInfo dictionary. In fact what I do is to generate a unique ID for each of my notifications (of course this ID is something I’m able to retrieve later), then when I want to cancel the notification associated to a given ID I will simply scan all available notifications using the array:
[[UIApplication sharedApplication] scheduledLocalNotifications]
and then I try to match the notifications by investigating the ID. E.g.:
NSString *myIDToCancel = @"some_id_to_cancel";
UILocalNotification *notificationToCancel=nil;
for(UILocalNotification *aNotif in [[UIApplication sharedApplication] scheduledLocalNotifications]) {
if([[aNotif.userInfo objectForKey:@"ID"] isEqualToString:myIDToCancel]) {
notificationToCancel=aNotif;
break;
}
}
if(notificationToCancel) [[UIApplication sharedApplication] cancelLocalNotification:notificationToCancel];
I don’t know if this approach is better or not with respect to the Archiving/Unarchving one, however it works and limits data to be saved to just an ID.
Edit: there was a missing braket