使用iOS中的CLLocation管理器获取一次坐标

时间:2013-02-24 23:25:39

标签: ios geolocation cllocationmanager

我正在使用此代码获取坐标:

_locationManager = [[CLLocationManager alloc] init];
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
_locationManager.delegate = self;
[_locationManager startUpdatingLocation];

然后我正在使用

- (void)locationManager:(CLLocationManager *)manager
 didUpdateLocations:(NSArray *)locations
{

_currentLocation = [locations lastObject];


//Doing some stuff

//I am using stopUpdatingLocation but this delegate is called a lot of times
[_locationManager stopUpdatingLocation];



 }

我实际上想要获得一次坐标,因为我想避免多次执行didUpdateLocation中的代码。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

这是因为位置管理器多次触发其更新,逐步获得更准确的位置结果。

阻止这种情况的一种方法就是使用布尔值

BOOL _hasUpdatedUserLocation = NO;

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    if (!_hasUpdatedUserLocation) {
        _hasUpdatedUserLocation = YES;
        ... // other code
    }
}

或者,你可以杀死委托:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    [locationManager setDelegate:nil];
    ... // other code
}