我在一个应用程序中有两个CLLocationManage。第一个是监视信标区域,而另一个是监视正常的CLRegion。

上午第一个

// Do any additional setup after loading the view.
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;

B.m第二
  gpsLocationManager = [[CLLocationManager alloc] init];
  gpsLocationManager.delegate = self;

我对后者非常确定,我没有在任何信标区域上调用任何startMonitoringForRegion。但是,似乎B中的gpsLocationmanager一直从A中的那个接收到enterRegion回调。因此最终,我检查了传入的区域para类型,以使gpsLocationManager不响应来自信标区域的任何回调。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
  NSLog(@"%d regions under monitor:", self.gpsLocationManager.monitoredRegions.count);
  NSLog(@"%d regions in regionArray:", self.regionArray.count);
  NSLog(@"Region type %@:", [region class]);
 if(![region isKindOfClass:[CLBeaconRegion class]]){

任何想法?

问候
锤子

最佳答案

CoreLocation功能在整个应用程序范围内提供。

这就是为什么通用模式是在CLLocationManager中初始化AppDelegate并将其设置为CLLocationManagerDelegate的原因。

如果您需要在多个CLLocationManager中访问一个UIViewController,那么我将其设为AppDelegate的属性。然后,可以将所需的回调转发给UIViewController,如果它们已经初始化并且可见。

关于ios - 两个CLLocationManager干扰,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26839170/

10-11 20:11