CLLocationManager奇怪的行为

时间:2012-04-02 19:29:36

标签: iphone objective-c ios geolocation cllocationmanager

我正在使用位置管理器在他/她按下按钮时获取用户位置。

我只需要那个exat时间位置,所以我在获取位置后关闭更新。

如果我第一次得到的位置是0 0 lat 0 lng那么。

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    lat = newLocation.coordinate.latitude;
    lng = newLocation.coordinate.longitude;
    [locationManager stopUpdatingLocation];
    NSLog(@"New Latlng: %f x %f", lat, lng);
}

当用户按下按钮时,我调用:[locationManager startUpdatingLocation];

然后我将位置发送到我的服务器[self sendData]。但位置为零。 在我的-sendData方法中,我添加了一个NSLog来跟踪发生了什么,我意识到我在-locationManager:didUpdateToLocation被调用之前将数据发送到服务器...

2012-04-02 16:06:24.225 MyApp[2892:707] ---- Data sent to server ----
2012-04-02 16:06:25.167 MyApp[2892:707] Nova Latlng: -23.003582 x -43.316311

我试过这个,但它没有按预期工作:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    [locationManager startUpdatingLocation];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self sendData];
    });
});

如何使[self sendData]等到我正确填充了lat和lng变量?

2 个答案:

答案 0 :(得分:0)

为什么不在stopUpdatingLocation之后立即拨打电话?

答案 1 :(得分:0)

把这段代码

dispatch_async(dispatch_get_main_queue(), ^{
    [self sendData];
});

didUpdateToLocation:中的

[locationManager stopUpdatingLocation];

应该这样做。位置管理器更新是异步进行的,因此在尝试对数据执行任何操作之前,必须等到要处理的内容。