現在、ユーザーが訪れた状態を記録する iOS アプリを作成しようとしています。
私が直面している問題は、私の(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 の制限に達していることは理解していますが、それを制限する方法がわかりません。
これが私のコードです:
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
。