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 km以上移動した場合でも、常に同じです。

locationupdateがあるときはいつでも、正確な新しい場所を取得する方法を教えてください。前もって感謝します。

4

1 に答える 1

3

あなたはロケーションマネージャーを停止しています

[self.locationManager stopUpdatingLocation];

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

。このデリゲートメソッドは、ユーザーが移動するたびに呼び出され、最初に古い(キャッシュされた)データを提供できるため、最初の場所の修正を取得したときにすぐに停止することで、おそらく毎回キャッシュされた場所を取得します。修正は簡単です。ロケーションマネージャーをそこで停止するのではなく、viewControllerが消えたとき、または同様の便利な場所で停止します。

于 2012-08-06T01:18:13.520 に答える