Geofencing didEnterRegion,didExitRegion函数没有在iphone 5S iOS8.1中调用

我整天都进行了调试,委托完全被调用了。

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

那么这是我的标准代码要求监视器。 使用CoreLocation.framework。

 [locationManager startMonitoringForRegion:geofence]; 

并在我的plist中注册了这些。

 NSLocationAlwaysUsageDescription Lugang NSLocationWhenInUseUsageDescription Lugang 

后台应用刷新启用,但我没有看到我的应用程序。

我试图在LocationManager的实例中打印我的monitoredRegions,并且有我的受监控区域。

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

和regionMonitoringAvailable是真的。

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

在iOS 8中,我曾要求requestAlwaysAuthorization

 [locationManager requestAlwaysAuthorization]; 

我曾经尝试过三个状态,app在前台,应用程序在后台,app不活跃。 这些州都没有打电话。

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

没有任何错误。

我曾经尝试过

 [locationManager requestStateForRegion:geofence]; 

工作正常。

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

在我的requestStateForRegion中触发了。

我不知道是什么让didEnterRegion没有被调用,我知道在iOS 7及以上设备工作,但我现在没有这样的设备作证。

也许requestStateForRegion可以满足我的要求,但我仍然无法弄清楚DidEnterRegion是如何工作的。 并且这些都不会触发任何错误消息来告诉开发人员调试。

我面临同样的问题,以下是我遵循的步骤并获得成功。

  • locationmanager添加地理栅栏arrays数据后。 使用下面的代码相同。

     for (CLRegion *monitored in [locationManagerGeofence monitoredRegions]) { [locationManagerGeofence stopMonitoringForRegion:monitored]; } self.geofencesArray = [NSMutableArray arrayWithArray:[self buildGeofenceData]]; if([CLLocationManager regionMonitoringAvailable]) { for (CLRegion *region in self.geofencesArray) { [locationManagerGeofence startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyBest]; } } else { [BB_Global displayAlertWithTitle:@"" message:@"This app requires region monitoring features which are unavailable on this device."]; } 
  • 确保您的wifi已开启。
  • 使用以下代表检查您的区域的开始监控。

     -(void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region { NSLog(@"Started monitoring %@ region", region.identifier); } 
  • 使用这两种委托方法进行地理围栏。 1) DidEnter 2) DidExit

  • 通过某些移动或其他位置测试您的设备(确保将地理围栏设置为具有100米半径的不同位置)。 为此,您在DidEnterDidExit方法中实现本地通知,因此无需调试。 一旦你的方法将被调用当地通知是火。
  • 获得成功:)