iOS définit une notification locale un jour spécifique

Je suis sûr que cette question est reproduite quelque part, mais je ne trouve pas de solution. Je fais une application dans laquelle une fonctionnalité permet à l'user de sélectionner les jours et les heures, ils recevront une notification locale.

Ils peuvent choisir n'importe quelle heure du jour qu'ils aiment, et peuvent basculer les différents jours de la semaine (lundi, tues, weds etc.). Les notifications seront envoyées chaque semaine. Je limite donc l'user à la création de seulement 3 notifications – si tous les 7 jours sont sélectionnés, je vais définir le repeatInterval à tous les jours (une notification). Si 6 jours sont sélectionnés pour chaque 3 notifications alors j'ai besoin d'une notification individuelle pour chaque jour (totalisant 3×6 = 18 notifications). Selon toute vraisemblance, une seule notification sera utilisée, c'est très bien.

Je sais comment définir une notification pour un certain time à l'avenir, mais comment puis-je définir une notification par exemple à 18 heures un lundi?

Voici mon code que j'ai utilisé pour tester. Il définit une alerte pendant 4 secondes dans le futur (je l'appelais depuis applicationDidEnterBackground ).

  NSDateComponents *changeComponent = [[NSDateComponents alloc] init]; changeComponent.second = 4; NSCalendar *theCalendar = [NSCalendar currentCalendar]; NSDate *itemDate = [theCalendar dateByAddingComponents:changeComponent toDate:[NSDate date] options:0]; UILocalNotification *localNotif = [[UILocalNotification alloc] init]; localNotif.fireDate = itemDate; localNotif.timeZone = [NSTimeZone defaultTimeZone]; localNotif.repeatInterval = NSWeekdayCalendarUnit; 

Exactement comme vous le faites en ce moment, mais créez une date différemment:

 NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; [comps setDay:1]; [comps setMonth:1]; [comps setYear:2013]; [comps setHour:10]; [comps setMinute:10]; [comps setSecond:10]; localNotif.fireDate = [[NSCalendar currentCalendar] dateFromComponents:comps]; 

J'ai aussi cherché à ce sujet. Le code ci-dessous fonctionne bien pour moi. Passez la valeur du jour de la semaine 1 à 7 du dimanche au samedi et le corps de notification avec l'action que vous voulez tirer et spécifiez votre date, puis la notification viendra sur ce jour spécifique. Espérons que cela vous aidera.

 -(void) weekEndNotificationOnWeekday: (int)weekday :(UILocalNotification *)notification : (NSDate*) alramDate { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate: alramDate]; [componentsForFireDate setWeekday: weekday] ; //for fixing Sunday // [componentsForFireDate setHour: 20] ; //for fixing 8PM hour // [componentsForFireDate setMinute:0] ; // [componentsForFireDate setSecond:0] ; notification.repeatInterval = NSWeekCalendarUnit; notification.fireDate=[calendar dateFromComponents:componentsForFireDate]; [[UIApplication sharedApplication] scheduleLocalNotification:notification]; } 

Je sais comment définir une notification pour un certain time à l'avenir, mais comment puis-je définir une notification par exemple à 18 heures un lundi?

Vous pouvez créer un object NSDate représentant 18h le lundi suivant avec l'approche montrée dans Comment get un NSDate pour un jour spécifique de la semaine et l'heure à partir d'un NSDate existant . Ensuite, si vous voulez qu'il se répète chaque lundi, vous pouvez utiliser localNotification.repeatInterval = NSWeekCalendarUnit . Cependant, je ne suis pas sûr que ça va fonctionner comme prévu avec l'heure d'été.

Je ne pense pas que vous puissiez planifier des notifications avec autant de flexibilité. Il suffit de programmer le prochain chaque fois qu'ils le modifient, et quand il triggers le calendar suivant le prochain. Un seul à s'inquiéter de l'annulation et facile à installer.