didUpdateToLocation调用多个

sam*_*mir 2 objective-c ios

我有一个iOS应用程序巫婆使用用户的当前位置.我这样做:

-(void)startGeoloc{

    NSLog(@"start geoloc");

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy=kCLLocationAccuracyHundredMeters;
    [locationManager startUpdatingLocation];
}

#pragma mark - CLLocationManagerDelegate methods
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    [locationManager stopUpdatingLocation];
    AppDelegate *apDelegate =(AppDelegate *)[UIApplication sharedApplication].delegate;
    apDelegate.modeGeoloc = YES;
    [self callWebService:locationManager.location];

}
Run Code Online (Sandbox Code Playgroud)

问题是,我的方法callWebService:locationManager.location被调用两次,我只想称它为一次.我怎么能这样做?谢谢你的回答

Mik*_*das 11

要确保locationManager仅调用"didUpdate ..."方法一次,请使用BOOL来引用是否已找到该位置.

  1. 创建ivar BOOL:

    @property BOOL didFindLocation;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在locationManager startUpdatingLocation之前,将新BOOL设置为NO.这样您就可以随意调用新的位置更新.

    -(void) startFindingLocation {
    
        self.didFindLocation = NO; // like this
    
        locationManager = [[CLLocationManager alloc] init];
        [locationManager setDelegate:self]
        [locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
        [locationManager startUpdatingLocation];
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在"didUpdateLocations"中,检查它.

    - (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    
        if (!self.didFindLocation) {
            self.didFindLocation = YES;
            [locationManager stopUpdatingLocation];
    
            // do the rest of your stuff
    
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

如果可能,请不要在代码中的任何其他位置设置didFindLocation以避免混淆.

  • ...到BOOL-mobile! (5认同)
  • 这是一个如此简单的解决方案,不敢相信我没有想到它.谢谢! (2认同)