【发布时间】:2014-03-02 11:18:02
【问题描述】:
当用户退出一个区域时,我正在使用区域监控来运行一些代码。当应用程序在前台或后台运行且设备屏幕位于locationManger:didExitRegion: 时,会按预期调用。但是,当屏幕关闭时,我通常在通过单击电源按钮打开屏幕之前不会收到回调,此时会立即调用locationManger:didExitRegion:。所有测试均在 iPhone 5s 上完成。
我是这样设置区域的:
self.monitoredRegion = [self setupGeoFenceWithCenter:self.currentLocation radius:200];
[self.locationManager startMonitoringForRegion:self.monitoredRegion];
-(CLRegion *)setupGeoFenceWithCenter:(CLLocation *)center radius:(CGFloat)radius
{
if (radius > self.locationManager.maximumRegionMonitoringDistance)
{
radius = self.locationManager.maximumRegionMonitoringDistance;
}
CLRegion * region = [[CLCircularRegion alloc] initWithCenter:center.coordinate
radius:radius
identifier:@"geofence"];
return region;
}
这是委托回调:
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
NSLog(@"Exited Region");
}
这是CLLocationManager 的初始化:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
另外,最近我注意到locationManager:monitoringDidFailForRegion:withError: 方法被更频繁地调用并出现以下错误描述:
Error Domain=kCLErrorDomain Code=5 "无法执行该操作 完全的。 (kCLErrorDomain 错误 5.)"
但即使出现此错误,当应用程序处于前台时,它仍按预期工作。 这是区域监控的预期行为吗?有人遇到过这种情况么?这可能是我遇到的错误的结果吗?
谢谢!
【问题讨论】:
-
我正在使用 iOS 模拟器的高速公路驾驶模拟对其进行测试。我的代表永远不会被召唤……有什么想法吗?我已经设置了委托,并且 CLLocationManager 对象也被保留了......
标签: ios iphone objective-c core-location geofencing