Réputation locale de notification à différents moments

J'ai une application qui génère des time de prière (5 fois par jour) Je veux créer une notification pour les 5 prières, mais le problème est que les time changent tous les jours en fonction de certains calculs.

Modifier:

Les calculs sont effectués en fonction de la localization GPS, de sorte que lorsque l'user change de ville, les horaires seront mis à jour en conséquence. Je saisis la date, le timezone, les coordonnées GPS dans une méthode et j'obtiens des valeurs de time de prière en format (HH: mm) pour ce jour / location donné. Maintenant, j'ai besoin de configurer les notfications. Je ne suis pas sûr où les mettre en place.

voici le code

#import "PrayerTimeViewController.h" #import "PrayTime.h" @implementation PrayerTimeViewController - (id)initWithNibName:(NSSsortingng *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization UITabBarItem *tbi = [self tabBarItem]; [tbi setTitle:NSLocalizedSsortingng(@"PrayerTimes", nil)]; UIImage *i = [UIImage imageNamed:@"11-clock"]; [tbi setImage:i]; [i release]; } return self; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"Madinah"]]; self.view.backgroundColor = background; [background release]; locationManager = [[CLLocationManager alloc]init]; [locationManager setDelegate:self]; [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; [locationManager setDistanceFilter:kCLDistanceFilterNone]; [locationManager startUpdatingLocation]; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSTimeInterval t = [[newLocation timestamp] timeIntervalSinceNow]; if (t < -180) { return; } PrayTime *prayerTime = [[PrayTime alloc]init]; [prayerTime setCalcMethod:0]; [prayerTime setFajrAngle:16]; [prayerTime setIshaAngle:14]; [prayerTime setAsrMethod:0]; NSDate *curentDate = [NSDate date]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* compoNents = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:curentDate]; CLLocationCoordinate2D currLoc = [newLocation coordinate]; NSMutableArray *prayerCal = [prayerTime getDatePrayerTimes:[compoNents year] andMonth:[compoNents month] andDay:[compoNents day] andLatitude:currLoc.latitude andLongitude:currLoc.longitude andtimeZone:[[NSTimeZone localTimeZone] secondsFromGMT]/3600]; [prayerTime release]; [fajer setText:[prayerCal objectAtIndex:0]]; // UILocalNotification *localNotification = [[UILocalNotification alloc] init]; NSSsortingng *time = [prayerCal objectAtIndex:0]; NSSsortingng *dates = [NSSsortingng ssortingngWithFormat:@"%d-%d-%d %@",[compoNents year],[compoNents month],[compoNents day],time]; NSDateFormatter *dateText = [[NSDateFormatter alloc]init]; [dateText setDateFormat:@"yyyy-MM-dd HH:mm"]; [dateText setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:[[NSTimeZone localTimeZone] secondsFromGMT]]]; NSLog(@"%@",[dateText dateFromSsortingng:dates]); [shrooq setText:[prayerCal objectAtIndex:1]]; [duhur setText:[prayerCal objectAtIndex:2]]; [aser setText:[prayerCal objectAtIndex:3]]; [maghreb setText:[prayerCal objectAtIndex:5]]; [isha setText:[prayerCal objectAtIndex:6]]; [prayerCal release]; } @end 

Vous pouvez utiliser le paramètre repeatInterval pour répéter vos cinq notifications, en les faisant apparaître tous les jours à la même heure. Malheureusement, il n'y a aucun moyen d'ajuster l'heure sans exécuter votre application.

Vous pouvez exécuter une application GPS en arrière-plan, bien que ce serait un saccage sur la batterie juste pour régler quelques timers. (Ce process d'arrière-plan est vraiment conçu pour les applications de suivi GPS.Je ne suis pas sûr de ce que Apple ferait de l'utiliser dans un but légèrement différent.)

Mais le plus simple serait de mettre à jour quand l'application est lancée. Lors de son lancement, vous obtiendrez les notifications actuelles (en utilisant la propriété scheduledLocalNotifications de UIApplication ), annulez-les si elles sont incorrectes ou obsolètes et créez-en de nouvelles. Chaque notification contient une charge utile de dictionary que vous pouvez utiliser pour faciliter l'identification de vos alarmes.