我正在使用位置管理器在他/她按下按钮时获取用户位置。
我只需要那个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变量?
答案 0 :(得分:0)
为什么不在stopUpdatingLocation
之后立即拨打电话?
答案 1 :(得分:0)
把这段代码
dispatch_async(dispatch_get_main_queue(), ^{
[self sendData];
});
后didUpdateToLocation:
中的
[locationManager stopUpdatingLocation];
应该这样做。位置管理器更新是异步进行的,因此在尝试对数据执行任何操作之前,必须等到要处理的内容。