Estoy tratando de usar regiones de monitoreo para rastrear si los usuarios han visitado puntos de referencia. el gerente de locación se inicializa en un viewcontroller junto con una MapKitiphone CLLocationmanager No se activan las devoluciones de llamada de monitoreo de región
en viewDidLoad del controlador de vista:
if (self.locationManager == nil)
{
// NSLog(@"creating location manager");
self.locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
locationManager.distanceFilter = kCLDistanceFilterNone;
}
NSSet* set=[locationManager monitoredRegions];
if ([CLLocationManager regionMonitoringAvailable] && [CLLocationManager regionMonitoringEnabled]) {
NSLog(@"region monitoring okay");
NSLog(@"monitored regions: %@",set);
}
Me da la NSLogs "región de monitoreo bien" y todas las regiones correctamente.
adición de las regiones se realizan igual que
double metres=20.0;
CLLocationDistance dist=metres;
CLLocationAccuracy acc=1.0;
CLRegion *reg=[[CLRegion alloc] initCircularRegionWithCenter:coordinate radius:dist identifier:landmarkObj.landmarkName];
[locationManager startMonitoringForRegion:reg desiredAccuracy:acc];
pero las devoluciones de llamada no todo son provocados
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Entered"
message:region.identifier
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Exited"
message:region.identifier
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
}
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
{
NSLog(@"started monitring for region: %@",region);
}
- (void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{
NSLog(@"%@",error);
}
la actualización de la ubicación, sin embargo, funciona bien.
[locationManager startUpdatingLocation];
dispara el didUpdateToLocation devolución de llamada como se esperaba
Actualización: didUpdatToLocation utilizado para monitorear a las regiones en su lugar. todavía interesado en saber por qué esto no funcionaría, parece que pocos han tenido éxito con la supervisión de la región
¿Has encontrado una solución a este problema? Tengo el mismo problema y didStartMonitoringForRegion no se activa. – Das
resulta que el monitoreo de la región simplemente no me da la precisión que necesito. Terminé haciendo una comprobación manual para cada devolución de llamada didUpdateToLocation. Esto fue factible para mí ya que estaba rastreando solo 10 regiones – tzl