3 votes

Core Location didEnterRegion ne fonctionne pas

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

ne fonctionne que si la UIView correspondant à la classe qui implémente CLLocationManagerDelegate est active.

Si je change la vue, cela ne déclenchera pas didEnterRegion. Quelqu'un peut-il m'aider ?

Mon code ressemble à ceci

- (void)enableRegionMonitoring {
    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDelegate:self];
    CLLocationCoordinate2D myMonLocation = CLLocationCoordinate2DMake(10.766699790955, 76.650101525879);
    CLRegion *myRegion = [[CLRegion alloc]
                         initCircularRegionWithCenter:myMonLocation
                                               radius:100
                                           identifier:@"MyLoc"];
    //NSLog(@"reg=%@",myRegion); 
    // Start monitoring for our CLRegion using best accuracy
    [locationManager startMonitoringForRegion:myRegion
                              desiredAccuracy:kCLLocationAccuracyBest];
}

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    NSLog(@"Entered Region");

    NSDate *nowx=[NSDate date];

    UILocalNotification *localNotification=[[UILocalNotification alloc]init];
    if (!localNotification)
        return;
    NSDictionary *data = [NSDictionary dictionaryWithObject:@"qw" forKey:@"mykey"];
    [localNotification setUserInfo:data];

    [localNotification setFireDate:nowx];
    [localNotification setTimeZone:[NSTimeZone defaultTimeZone]];
    NSMutableString *message=[[NSMutableString alloc]init];
    message = @"Local Not Triggered By didEnterRegion";
    [localNotification setAlertBody:[nowx description]];
    [localNotification setAlertAction:@"Open App"];
    [localNotification setHasAction:YES];
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}

1voto

Soph Points 702

En regardant votre code, je suppose que vous utilisez l'ARC. En fonction de la hiérarchie contrôleur/vue, votre vue et votre contrôleur peuvent être désalloués lorsque vous passez à une autre vue, et dans ce cas, le gestionnaire d'emplacement sera également désalloué.

Il suffit de déplacer l'ensemble du code CLLocationManager vers votre AppDelegate et de laisser l'AppDelegate être le délégué CLLocationManager. Là où vous appelez actuellement "enableRegionMonitoring", vous l'appelleriez plutôt sur votre AppDelegate. Cela restera actif même si le ViewController n'est plus visible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X