我正在测试iOS 7.1上的iPad第三代,因为我目前没有其他iOS设备。
我第一次运行我的应用时,会开始监控多个地区。状态栏和位置服务设置页面显示概述的位置服务图标(我的应用程序是列表中唯一具有轮廓图标的应用程序)。当我杀死我的应用程序时,图标仍然显示在两个地方,因为我还没有停止监控这些地区。在那之前一切都很好。
我的问题是,当我第二次运行我的应用程序时,我停止监控所有受监控的区域,但位置服务概述图标不会在状态栏和位置服务设置页面上消失...
这是我第一次运行时调用的代码:
- (void) getLocationManagerInstance {
if (!self.locationManager) {
self.locationManager = [CLLocationManager new];
}
self.locationManager.delegate = self;
}
- (void) startLocationGathering {
if(self.shouldUpdateGPSLocations) {
[self.locationManager startMonitoringSignificantLocationChanges];
}
}
- (void) startMonitoringBeaconRegions {
if(self.rootRegion) {
[self.locationManager startMonitoringForRegion:self.rootRegion];
}
if (self.beaconRegions && self.beaconRegions.count < 20) {
[self.beaconRegions enumerateObjectsUsingBlock:^(CLBeaconRegion* region, NSUInteger idx, BOOL *stop) {
[self.locationManager startMonitoringForRegion:region];
}];
}
}
- (void) startMonitoringCircularRegions {
if (self.gpsRegions && self.gpsRegions.count) {
[self.gpsRegions enumerateObjectsUsingBlock:^(CLCircularRegion* region, NSUInteger idx, BOOL *stop) {
[self.locationManager startMonitoringForRegion:region];
}];
}
}
我的代码在第二次运行时调用了:
- (void) getLocationManagerInstance {
if (!self.locationManager) {
self.locationManager = [CLLocationManager new];
}
self.locationManager.delegate = self;
}
- (void) locationManagerCleanup {
[AWRUtils dlog:@"locationManagerCleanup"];
NSArray* monitoredRegions = [self.locationManager monitoredRegions].allObjects;
for (CLRegion* r in monitoredRegions) {
[self.locationManager stopMonitoringForRegion:r];
}
NSArray* rangedRegions = [self.locationManager rangedRegions].allObjects;
for (CLBeaconRegion* r in rangedRegions) {
[self.locationManager stopRangingBeaconsInRegion:r];
}
[self.locationManager stopUpdatingLocation];
[self.locationManager stopMonitoringSignificantLocationChanges];
}
如果我卸载了我的应用,概述的位置服务图标就会消失。但是,当我停止监控受监控区域时,为什么图标不会消失?
编辑:经过更多测试后,我发现第二次运行的CLLocationManager实例没有受监控的区域([self.locationManager monitoredRegions]
返回 nil )...
编辑2:我还发现,如果在第二次运行时,我开始监控在第一次运行时开始监控的所有相同区域,然后我停止监控它们,概述的位置服务图标就会消失。这是正常行为吗?我在所有的互联网研究中都没有读到这一点......