Geofencing didEnterRegion, didExitRegion no funciona en iphone 5S iOS8.1

Había depurado todo el día y el delegado recibió una llamada.

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

Bueno, aquí está mi código estándar que pide un monitor. use CoreLocation.framework.

 [locationManager startMonitoringForRegion:geofence]; 

Y registré estos en mi plist.

 <key>NSLocationAlwaysUsageDescription</key> <string>Lugang</string> <key>NSLocationWhenInUseUsageDescription</key> <string>Lugang</string> 

la actualización de la aplicación de background habilitada, pero no vi mi aplicación dentro.

Intenté imprimir mis regiones monitoreadas en el caso de LocationManager y está mi región monitoreada.

 NSLog(@"%@" ,locationManager.monitonetworkingRegions); 

y regionMonitoringAvailable es verdadero.

 NSLog(@"%d" , [CLLocationManager regionMonitoringAvailable] ); 

En iOS 8, había pedido requestAlwaysAuthorization

 [locationManager requestAlwaysAuthorization]; 

Había intentado tres estados, la aplicación en primer plano, la aplicación en segundo plano, la aplicación no está activa. ninguno de estos estados llamó.

 -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 

no obtuvo ningún error en absoluto.

Y lo he intentado

 [locationManager requestStateForRegion:geofence]; 

funciona bien.

 - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region 

se desencadenó en mi requestStateForRegion.

No sé qué hacer si didEnterRegion no fue llamado y sé que en iOS 7 y dispositivos funcionan pero no tengo un dispositivo como para testificar ahora.

Tal vez requestStateForRegion podría cumplir con mi request, pero aún no podía descifrar cómo DidEnterRegion no funciona. Y ninguno de estos desencadena ningún post de error para decirle a los desarrolladores que depuren.

He enfrentado el mismo problema, los siguientes son los pasos que seguí y logro tener éxito.

  • Después de agregar sus datos geofence Array en locationmanager . Use el código a continuación para el mismo.

     for (CLRegion *monitonetworking in [locationManagerGeofence monitonetworkingRegions]) { [locationManagerGeofence stopMonitoringForRegion:monitonetworking]; } self.geofencesArray = [NSMutableArray arrayWithArray:[self buildGeofenceData]]; if([CLLocationManager regionMonitoringAvailable]) { for (CLRegion *region in self.geofencesArray) { [locationManagerGeofence startMonitoringForRegion:region desinetworkingAccuracy:kCLLocationAccuracyBest]; } } else { [BB_Global displayAlertWithTitle:@"" message:@"This app requires region monitoring features which are unavailable on this device."]; } 
  • Asegúrate de que tu wifi esté encendido.
  • Verifique su supervisión de inicio para la región con el delegado a continuación.

     -(void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region { NSLog(@"Started monitoring %@ region", region.identifier); } 
  • Utilice estos dos methods delegates para geocerca. 1) DidEnter 2) DidExit

  • Pruebe su dispositivo con algún movimiento u otro lugar (asegúrese de configurar su set de geocerca con una location diferente con un radio de 100 metros). por lo mismo, implementa la notificación local en el método DidEnter y DidExit , por lo que no es necesario depurar. Una vez que su método será llamado, la notificación local se disparará.
  • Consigue el éxito 🙂