未调用CoreLocation区域委托

时间:2012-06-05 09:15:01

标签: objective-c ios gps core-location

我正在构建一个专门用于基于位置的应用程序的应用程序,所以我需要让用户坐标经度和纬度及其工作。

现在我需要知道用户是否输入了我使用CLLocationManager委托预定义的某个区域,因此我使用didEnterRegion语句覆盖NSLog以了解用户是否输入区域。

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 

我致电startMonitoringForRegion:,但didEnterRegionmonitoringDidFailForRegion等代表或CLRegion的任何代表都没有发生任何事情。

以下是我的一些代码:

   -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
   {
        locLongittude=newLocation.coordinate.longitude;
        locLattiude=newLocation.coordinate.latitude;

        self.regionTimer=[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(monitorRegion) userInfo:nil repeats:NO];
   }

   -(void)startMonitor:(float)latitude longitude:(float)longitude radius:(float)radius
   {
      CLLocationCoordinate2D home;
      home.latitude = latitude;
      home.longitude = longitude;

      CLRegion* region = [[CLRegion alloc] initCircularRegionWithCenter:home radius:radius identifier:@"home"];

      if([CLLocationManager regionMonitoringEnabled] && [CLLocationManager regionMonitoringAvailable])
          [locManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyBest]; 

      NSLog(@"Count: %d region aval %d enable %d",[[locManager monitoredRegions]count], [CLLocationManager regionMonitoringAvailable],[CLLocationManager regionMonitoringEnabled]);
      for( CLRegion* region in locManager.monitoredRegions )
      NSLog( @"%@", region );
   }

   -(void)monitorRegion
   {
      [self startMonitor:31.971160 longitude:35.832465 radius:10000.0];
   }

编辑:使用模拟器完成的所有测试,并使用Product->模拟位置。调试 - >模拟位置

好的,它有效。上面的代码非常有用,问题在于,调用didEnterRegion方法是在您需要输入的区域之外,然后输入它以使其工作。

我在做的是在模拟中我总是在我需要输入的区域内选择一个坐标,这是它必须在区域之外的问题。

所以这是我的代码与你分享

更新:我想知道为什么当我离开该地区时,didExitRegion没有被调用?

1 个答案:

答案 0 :(得分:0)

根据我自己的经验,看起来区域监控取决于Cell Change事件(为什么Apple以这种方式设计它?我想增加电池续航时间)。所以,这种实现并不理想。

理想情况下,无论何时越过边界,它都应该有效,但在iPhone上不会以相同的方式发生。即使使用内置的Reminder应用程序,有时它也会因附近的基于位置的提醒而失败。

因此,在您的情况下,我认为不会发生单元格更改事件,并且为什么不调用didExitRegion。您可以使用startMonitoringSignificantLocationChanges仔细检查它。