Ios locationManager:DidextRegion:在屏幕关闭时不调用

Ios locationManager:DidextRegion:在屏幕关闭时不调用,ios,iphone,objective-c,core-location,geofencing,Ios,Iphone,Objective C,Core Location,Geofencing,我使用区域监视在用户退出区域时运行一些代码。当应用程序在前台或后台运行时,设备屏幕处于locationManager:didExitRegion:将按预期调用。但是,当屏幕关闭时,我通常不会收到回调,直到我通过单击电源按钮打开屏幕,此时会立即调用locationmanager:didExitRegion:。所有的测试都是在iphone5s上完成的 以下是我设置区域的方式: self.monitoredRegion = [self setupGeoFenceWithCenter:self.curr

我使用区域监视在用户退出区域时运行一些代码。当应用程序在前台或后台运行时,设备屏幕处于
locationManager:didExitRegion:
将按预期调用。但是,当屏幕关闭时,我通常不会收到回调,直到我通过单击电源按钮打开屏幕,此时会立即调用
locationmanager:didExitRegion:
。所有的测试都是在iphone5s上完成的

以下是我设置区域的方式:

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:
方法被调用的频率越来越高,错误描述如下:

错误域=kCLErrorDomain代码=5“无法执行该操作 已完成。(kCLErrorDomain错误5)。”

但即使有这个错误,当应用程序在前台时,它也能正常工作。 这是区域监测的预期行为吗?还有其他人遇到过这种情况吗?这可能是我犯的错误造成的吗


谢谢

您是否尝试过等待几分钟(4到15分钟)?PS:在关闭iDevice之前,你的应用程序应该在前台。这是基于iBeacon测试。。。希望它对你的情况有所帮助。

4-15分钟似乎太长了。文档中有写吗?还有,你为什么说应用程序必须在前台?根据苹果公司的说法,即使应用程序被终止,一旦跨过区域边界,应用程序就会启动并收到通知。我正在用iOS模拟器的高速公路驾驶模拟测试它。我的代表从来没有接到过电话。。有什么想法吗?我已经设置了委托,CLLocationManager对象也被保留。。。