2011-01-30 29 views
6

¿Alguien sabe ningún conocimiento del uso de este:Core monitoreo Localización región

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy

que estoy tratando de ponerlo en práctica en mi proyecto, pero:

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

no se está llamando?

¿Alguien tiene algún código de ejemplo o sabe por qué sucede esto?

Mi código es el siguiente. He creado un método como este en mi propia clase LocationManager:

- (void) locationManagerStartMonitoringRegion:(CLRegion *)region withAccuracy:(CLLocationAccuracy)accuracy { 
    NSLog(@"Start Monitoring"); 
    [locationManager startMonitoringForRegion:region desiredAccuracy:accuracy]; 
    NSLog(@"Monitored Regions: %i", [[locationManager monitoredRegions] count]); 
} 

entonces me llaman así:

CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(51.116261, -0.853758);  
CLRegion *grRegion = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:150 identifier:[NSString stringWithFormat:@"grRegion%i", value]]; 

[locationManager locationManagerStartMonitoringRegion:grRegion withAccuracy:kCLLocationAccuracyBest]; 

consigo NSLog de de:

2011-01-30 19 : 52: 26.409 TestingLocation [10858: 307] Iniciar el control

2011-01-30 19: 52: 27.103 TestingLocation [10858: 307] Regiones supervisadas:

Pero nunca consigue una NSLog de:

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

o

- (void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error { 
    NSLog(@"monitoringDidFailForRegion: %@",error); 
} 

Gracias

+0

¿Podría publicar el código que está utilizando? Es difícil ayudar sin contexto. – Jumhyn

+0

El código ahora se ha agregado a la publicación original anterior. – jodm

+0

@jodm todavía enfrenta este problema. ¿Conseguiste una solución para esto? ¿Eres capaz de disparar didEnterRegion. amablemente ayuda con un ejemplo de trabajo –

Respuesta

5

Tendrá que mover más bien un largo camino para la materia de vigilancia de la región para trabajar . Su granularidad actual parece estar basada en cuándo se transfiere de una torre de celda a otra; en mis pruebas, tuve que mover una milla o más para registrar que definitivamente había dejado una pequeña región que había establecido.

+1

Esta mañana camino a la oficina, registré alrededor de 5 puntos en el camino y 3 de ellos activados. Este es definitivamente el caso. didEnterRegion solo se llama cuando se cambia la torre de la celda O hay un cambio significativo de ubicación. Esto no ayuda con el contexto en el que quería usar el monitoreo de la región :( – jodm

+0

@jodm, sé que esto fue hace más de un año, pero ¿han mejorado las cosas? Tengo el mismo problema donde tuve puntos que no se dispararon o que se dispararía muy tarde. Tiene que haber una forma mejor ... –

+0

Puedo confirmar que el monitoreo de la región usa una ubicación significativa para cierta capacidad, desensamblé el binario del framework y encontré cosas relacionadas con las llamadas a una ubicación significativa. Pero aún así, eso no es concluyente. –

0

Tendría que ver dónde configuró su instancia locationManager. Pero como @Mark Adams intenta eludir, debe configurar su clase actual como delegado para locationManager, de modo que sepa a qué clase enviar los mensajes. Es tan simple como:

locationManager.delegate = self;

1

La exactitud se mejora en iOS 5.

+0

¿Tiene una idea de lo que se solucionó? Todavía estoy teniendo problemas en Eugene Oregon (~ 150,000 personas) lo que me lleva a pensar que se basa en las torres de telefonía celular y WiFi. Por supuesto que sería una locura si ese es el caso, ya que ** la supervisión de la región ** solo es útil en áreas urbanas densas. –

+0

Funciona en ios 5 y 6, basado en torres de telefonía móvil y wifi. Funciona mejor en áreas urbanas densas . Los únicos lugares donde tengo quejas sobre mi aplicación se encuentran en áreas muy desoladas (una isla, el norte de Canadá). –

1

La respuesta es:

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy 

está en desuso en ios 6.o. En su lugar, use la región `- (void) startMonitoringForRegion: (CLRegion *).

Gracias, Abdul`

+0

https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/startMonitoringForRegion:desiredAccuracy: – mcphersonjr

1

bien que se puede controlar múltiples regiones y simular localización en Xcode (desde el panel encima del depurador) para comprobar si está funcionando o no. Lo he probado y funciona bastante bien.