Mon application permet aux utilisateurs de définir un certain nombre de rappels à l'avenir. Lorsque l'application démarre, je veux savoir quels rappels (notifications) ont déjà été définis.
Puis-je relire les notifications que j'ai définies ou dois-je stocker dans mon application (par exemple, Core Data ou Plist)?
UIApplication
possède une propriété appelée scheduledLocalNotifications
que vous pouvez utiliser.
Pour Swift 3.0 et Swift 4.0
n'oubliez pas de faire import UserNotifications
Cela fonctionne pour iOS10 + et watchOS3 + depuis la classe UNUserNotificationCenter n'est pas disponible pour les anciennes versions ( link )
let center = UNUserNotificationCenter.current()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
center.getPendingNotificationRequests { (notifications) in
print("Count: \(notifications.count)")
for item in notifications {
print(item.content)
}
}
}
Scott a raison.
Propriété de UIApplication
scheduleLocalNotifications
Voici le code:
NSMutableArray *notifications = [[NSMutableArray alloc] init];
[notifications addObject:notification];
app.scheduledLocalNotifications = notifications;
//Equivalent: [app setScheduledLocalNotifications:notifications];
UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]];
if ([uid isEqualToString:uidtodelete])
{
//Cancelling local notification
[app cancelLocalNotification:oneEvent];
break;
}
}
NSArray *arrayOfLocalNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications] ;
for (UILocalNotification *localNotification in arrayOfLocalNotifications) {
if ([localNotification.alertBody isEqualToString:savedTitle]) {
NSLog(@"the notification this is canceld is %@", localNotification.alertBody);
[[UIApplication sharedApplication] cancelLocalNotification:localNotification] ; // delete the notification from the system
}
}
Pour plus d'informations, consultez ceci: exemple ScheduledLocalNotifications UIApplication ios
@Scott Berrevoets a donné la bonne réponse. Pour les répertorier, il est simple d'énumérer les objets du tableau:
[[[UIApplication sharedApplication] scheduledLocalNotifications] enumerateObjectsUsingBlock:^(UILocalNotification *notification, NSUInteger idx, BOOL *stop) {
NSLog(@"Notification %lu: %@",(unsigned long)idx, notification);
}];
Swift 3.0.2:
UIApplication.shared.scheduledLocalNotifications
Swift 4
UNUserNotificationCenter.current().getPendingNotificationRequests(completionHandler: { (requests) in
for request in requests {
if request.identifier == "IDENTIFIER YOU'RE CHECKING IF EXISTS" {
//Notification already exists. Do stuff.
} else if request === requests.last {
//All requests have already been checked and notification with identifier wasn't found. Do stuff.
}
}
})
J'ai utilisé cela pour corriger un bug où la même notification hebdomadaire était déjà définie et était de nouveau définie lorsque l'application s'ouvrirait, de sorte qu'elle continuerait de réinitialiser le minuteur pour apparaître, ce qui signifie qu'il ne s'est jamais produit.
Dans iOS 10
, en utilisant le nouveau framework UserNotifications
:
UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in
print("Requests: \(notificationRequest)")
}
Dans Swift, pour voir toutes vos notifications locales actuellement planifiées imprimées dans la console:
print(UIApplication.sharedApplication().scheduledLocalNotifications)