3

現在、ユーザーが訪れた状態を記録する 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

4

1 に答える 1

5

https://developer.apple.com/library/mac/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.htmlで説明されているように、CLLocationManager の distanceFilter プロパティを使用します。

distanceFilter プロパティを使用すると、場所が更新される前にデバイスが移動する必要がある距離をメートル単位で設定できます。

お役に立てれば!

于 2013-05-01T00:12:12.167 に答える