2012-08-01 6 views
1

위치 관리자가 위치를 업데이트하지 않는 문제가 있습니다. (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLoc fromLocation:(CLLocation *)oldLoc 함수가 호출되지만 새 위치가 동일한 이전 위치로 표시됩니다. , 내가 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]; 

    } 

난 "을 locationManager에 업데이트 % f를했다"(@ NSLog에 점점 오전 값 CLLocationManager

의 객체를 생성하고 내있는 viewDidLoad 방법에서부터 newLoc : 다음

코드의 내 작품이다 .coordinate.latitude)는 항상 동일하지만 현재 위치에서 2km 이상 움직였습니다.

위치 정보가있는 경우 정확한 위치를 얻는 방법을 알려주세요. 미리 감사드립니다.

+0

왜 NSTimer를 사용하여 열악한 위치 관리자를 다시 시작 하시겠습니까? ** 문서를 읽었다면 ** startUpdatingLocation **을 한 번 호출하는 것으로 충분하다는 것을 알았을 것입니다 ** ** –

+0

타이머를 추가하기 전에 뷰에서 한 번 [locationManager startUpdatingLocation]을 호출하려고했습니다 ,하지만 locationUpdate 대리자 메서드에서 동일한 이전 위치로 새 위치를 가져오고있었습니다. – Sonal0706

+0

그 이유는 ... 음 .. 너는 움직이지 않는거야? –

답변

3

당신은

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

[self.locationManager stopUpdatingLocation]; 

에 위치 관리자를 중지한다. 이 대리자 메서드는 사용자가 이동할 때마다 호출되며 처음에는 오래된 (캐시 된) 데이터를 제공 할 수 있으므로 첫 번째 위치 픽스를 얻을 때 즉시 중지하여 매번 캐시 된 위치를 얻습니다. 수정은 간단 합니다만, 위치 관리자를 정지하지 말고, viewController가 사라지거나 유사한 장소에서 멈추십시오.

+0

사실 내가 wifi ..와 iPad에서 응용 프로그램을 테스트하고 있었고 그것의 GPS 칩을 가지고 있지 않기 때문에 나는 어떤 위치 업데이 트를 얻지 못했습니다 ... 코드는 아이폰에서 작동합니다 ... – Sonal0706

관련 문제