1

问题是位置管理器没有更新位置。函数被调用,(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLoc fromLocation:(CLLocation *)oldLoc 但它将新位置显示为相同的旧位置。

以下是我的一段代码: 在我的 viewDidLoad 方法中,我正在创建 CLLocationManager 的对象

-(void) viewDidLoad
{

    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
    self.locationManager.distanceFilter = kCLDistanceFilterNone;
    // created a timer to call locationUpdate method 
    [NSTimer scheduledTimerWithTimeInterval:20 target: self selector:  @selector(locationUpdate) userInfo: nil repeats: YES];    

}

-(void)locationUpdate
{

    [self.locationManager startUpdatingLocation];

}

-(void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLoc
           fromLocation:(CLLocation *)oldLoc
{

    NSLog(@"in locationmanager did update %f",newLoc.coordinate.latitude);
    MKCoordinateRegion region = 
    MKCoordinateRegionMakeWithDistance(newLoc.coordinate, 0.01,      0.02);
    [self.mapView setRegion:region animated:YES];
    [self.locationManager stopUpdatingLocation];

}

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{

    if ([annotation isKindOfClass:[MKUserLocation class]])
    {
        MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.02);
        MKCoordinateRegion region = MKCoordinateRegionMake(mapView.userLocation.coordinate, span);
        [_mapView setRegion:region animated:YES];
        [_mapView regionThatFits:region];

    }

我在 NSLog(@"in locationmanager did update %f",newLoc.coordinate.latitude) 中得到的值总是相同的——尽管我从当前位置开始移动了超过 2 公里。

请帮助我了解如何在有位置更新时获得确切的新位置。提前致谢。

4

1 回答 1

3

您正在停止位置管理器

[self.locationManager stopUpdatingLocation];

-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLoc
       fromLocation:(CLLocation *)oldLoc

. 每次用户移动时都会调用此委托方法,并且可以在开始时为您提供旧的(缓存的)数据,因此当您获得第一个位置修复时立即停止它,您可能每次都会获得一个缓存的位置。修复很简单,只是不要在此处停止位置管理器,而是在您的 viewController 消失或类似的有用位置时停止。

于 2012-08-06T01:18:13.520 回答