Répéter une notification locale tous les 14 jours (deux semaines)?

Dans mon application, je dois définir répétitive UILocalNotification . Je peux définir repeatInterval comme quotidien, hebdomadaire, etc.

 UILocalNotification *localNotification = [[UILocalNotification alloc] init]; localNotification.repeatInterval = NSDayCalendarUnit; // or any other calendarUnit 

Ok, c'est bon, mais je dois définir repeatInterval tous les 14 jours. J'ai appris à partir de ce lien que nous ne pouvons utiliser qu'un des intervalles de répétition NSCalendarUnit. Donc, vous pouvez avoir un intervalle de répétition d'une minute ou une heure ou un jour, mais pas cinq minutes ou trois heures ou 14 jours. Toute idée sur cette limitation dans iOS 5 ou version ultérieure (cet article a été écrit pour iOS 4.0)?

Vous pouvez uniquement définir l'intervalle de répétition sur une unité de calendar. Afin d'get le bon intervalle de time, vous devrez peut-être définir plusieurs notifications.

Si par exemple vous souhaitez une notification toutes les 20 minutes, vous devrez créer 3 notifications à 20 minutes d'intervalle avec un intervalle de répétition de NSHourCalendarUnit.

Le problème dans votre cas est que la prochaine chose de l'unité de la semaine est un mois, mais un mois n'est pas exactement 4 semaines.

Pour réellement définir une notification pour tous les 14 jours, vous devrez créer 26 notifications avec un intervalle de répétition de NSYearCalendarUnit.

Vous pouvez annuler la notification et définir une nouvelle date de triggersment dans les 14 jours à countr de la date de traitement de la notification. Par exemple, lorsque votre application s'exécute au premier plan, faites-le dans:

 (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

Voir cette rubrique SO: Définir repeatInterval dans la notification locale

J'ai essayé de cette façon, et ça fonctionne.

Dans iOS 10, vous pouvez utiliser UNTimeIntervalNotificationTrigger pour répéter la notification tous les 14 jours.

 UNTimeIntervalNotificationTrigger* sortinggger = [UNTimeIntervalNotificationTrigger sortingggerWithTimeInterval:(14*24*3600) repeats: YES]; NSLog(@"td %@", sortinggger.nextTriggerDate); UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier content:content sortinggger:sortinggger]; [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Something went wrong: %@",error); } else { NSLog(@"Created! --> %@",request); } }]; 

J'espère que cela aidera tous ceux qui cherchent ce sujet.