CLLocationManager странное поведение - PullRequest
0 голосов
/ 02 апреля 2012

Я использую диспетчер местоположений для получения местоположения пользователя, когда он / она нажимает кнопку.

Мне просто нужно это местоположение времени exat, поэтому я отключаю обновления после получения местоположения.

Дело в том, что местоположение, в которое я получаю идентификатор 0 лат 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 голосов
/ 02 апреля 2012

Введите этот код

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

в didUpdateToLocation: после

[locationManager stopUpdatingLocation];

Это должно сделать это.Обновления Location Manager происходят асинхронно, поэтому вам нужно подождать, пока что-то обработать, прежде чем пытаться что-либо делать с данными.

0 голосов
/ 02 апреля 2012

Почему бы вам не позвонить сразу после stopUpdatingLocation?

...