2013-05-01 2 views
3

В настоящее время я пытаюсь написать приложение iOS, которое регистрирует состояния, которые посетил пользователь.Ограничить обратную геолокацию - kCLErrorDomain Code = 2

Проблема, с которой я сталкиваюсь, заключается в том, что мой метод (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations вызывается снова и снова. Я не обязательно рассматриваю это как проблему, кроме этого метода, я вызываю другой метод, который обращает геокоды объект CLLocation и дает имя состояния.

Ошибки я получаю:

Geocode failed with error: Error Domain=kCLErrorDomain Code=2 "The operation couldn’t be completed. (kCLErrorDomain error 2.)" 

Я понимаю, что я достижение предела на reverseGeoCoding в течение определенного TimeLimit, я просто не знаю, как ограничить его.

Вот мой код:

CLLocation *currentLocation; 

- (void) getLocation 
{ 
    CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) 
    { 

     if (error){ 
      NSLog(@"Geocode failed with error: %@", error); 
      return; 

     } 

     if(placemarks && placemarks.count > 0) 
     { 
      CLPlacemark *placemark= [placemarks objectAtIndex:0]; 
      currentState = [NSString stringWithFormat:@"%@",[placemark administrativeArea]]; 
     } 

     //Checks to see if the state exists in the textFile, if not it writes it to the file 
     if(![newState checkIfStateExists:currentState]) 
     { 
      [newState writeToFile:currentState]; 
     } 

    }]; 
} 

-(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    //just a thought, didn't work 
    //if(![[locations lastObject] isEqual:currentLocation]) 

     currentLocation = [locations lastObject]; 
     [self getLocation]; 

} 

-(void) initializeGPS 
{ 
    self.locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    [locationManager startUpdatingLocation]; 
} 


- (void) viewDidLoad 
{ 
    [self initializeGPS]; 
    [super viewDidLoad]; 

} 

Этот код прекрасно работает в том, что он получает место в системе координат GPS, переводит его в состояние имя, и пишет, что государственное имя файла.

Это просто называется слишком много раз, и я не уверен, как ограничить количество раз, которое вызывается (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations.

ответ

5

Используйте свойство distanceFilter из CLLocationManager, как описано здесь: https://developer.apple.com/library/mac/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

свойство distanceFilter позволяет установить расстояние в метрах устройство должно перемещаться до местоположения обновляется.

Надеюсь, это поможет!

+0

спасибо! Не понимал, что я могу это сделать! – Johnrad

+0

У меня есть один вопрос. когда я запустил StartUpdatingLocation, будет ли он изначально запускаться один раз, чтобы получить мое текущее местоположение? – Johnrad

+0

Да, это будет, если это новый экземпляр CLLocationManager. – csundman