2

나는 위치가 변경되었는지 확인하기 위해 매분 또는 현재 위치를 확인하는 응용 프로그램에서 작업하고 있습니다. xCode에서 시뮬레이션 된 위치를 사용하여 위치 변경을 시뮬레이션하고 있습니다. 처음에는 런던에서 할거야, 그리고 나서 도쿄와 같은 것으로 바꿀 것이라고 업데이트하면, 다시 위치를 확인해야 할 때 런던에 있다고 생각한다.CLLocationManager가 올바른 위치를 반환하지 않습니다.

-(void)recheckLocation{ 
    locationManager = nil; 

    [recheckLocation invalidate]; 

    locationManager = [[CLLocationManager alloc]init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; 
    [locationManager startUpdatingLocation]; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    geocoder = [[CLGeocoder alloc] init]; 

    [locationManager stopUpdatingLocation]; 

    // Reverse Geocoding 
    [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) { 
     NSLog(@"Found placemarks: %@, error: %@", placemarks, error); 
     if (error == nil && [placemarks count] > 0) { 

      placemark = [placemarks objectAtIndex:0]; 
      NSString *Location = [NSString stringWithFormat:@"%@, %@",placemark.locality, placemark.administrativeArea]; 

      recheckLocation = [NSTimer scheduledTimerWithTimeInterval:60.0f target:self selector:@selector(recheckLocation) userInfo:nil repeats:YES]; 

     } else { 
      NSLog(@"%@", error.debugDescription); 
     } 
    } ]; 

} 

위치를 변경 한 횟수에 관계없이 올바른 위치가 아닌 매번 동일한 위치를 제공합니다. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까?

답변

0

조금 더 오래된 게시물과 나는 CLLocationManager 물건에 대한 기본적인 지식을 가지고 있지만 여전히 문제를 해결하려고합니다. 위 코드에서 CLLocationManager가 매번 다시 작성되었다는 것을 이해합니다. CLLocationManager는 매번 다시 만들 필요가없는 싱글 톤 클래스와 같습니다. [locationManager startUpdatingLocation]을 호출하면됩니다. .

또한 [geocoder reverseGeocodeLocation : xxx]를 호출 할 때마다. 아마도 당신은 이것을하기 전에 정확성을 찾아야 할 것입니다. 그래서 반복해서 호출되지 않을 것입니다.

관련 문제