В настоящее время я пытаюсь написать приложение 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
.
спасибо! Не понимал, что я могу это сделать! – Johnrad
У меня есть один вопрос. когда я запустил StartUpdatingLocation, будет ли он изначально запускаться один раз, чтобы получить мое текущее местоположение? – Johnrad
Да, это будет, если это новый экземпляр CLLocationManager. – csundman