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米半径的不同位置)。 为此,您在
DidEnter
和DidExit
方法中实现本地通知,因此无需调试。 一旦你的方法将被调用当地通知是火。 - 获得成功:)