Restringir la geolocation inversa – kCLErrorDomain Code = 2

Actualmente estoy tratando de escribir una aplicación de iOS que registra los estados que un usuario ha visitado.

El problema que estoy enfrentando es que mi (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations método de (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations se llama una y otra vez. No veo necesariamente esto como un problema, excepto en ese método, estoy llamando a otro método que invierte los geocódigos del object CLLocation y le da el nombre del estado.

El error que recibo es:

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

Entiendo que estoy llegando al límite en reverseGeoCoding durante un determinado límite de time, no estoy seguro de cómo limitarlo.

Aquí está mi código:

 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.desinetworkingAccuracy = kCLLocationAccuracyHundnetworkingMeters; locationManager.distanceFilter = kCLDistanceFilterNone; [locationManager startUpdatingLocation]; } - (void) viewDidLoad { [self initializeGPS]; [super viewDidLoad]; } 

Este código funciona perfectamente en el hecho de que obtiene la location en coorderadas GPS, lo traduce a un nombre de estado y escribe ese nombre de estado en un file.

Simplemente se llama demasiadas veces, y no estoy seguro de cómo limitar el número de veces que (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations se llama a las (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations .

Utilice la propiedad distanceFilter del CLLocationManager como se describe aquí: https://developer.apple.com/library/mac/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

la propiedad distanceFilter le permite establecer la distancia en metros que el dispositivo debe viajar antes de actualizar la location.

¡Espero que esto ayude!