Вопрос по iphone, ios5, ios – геокодирование адреса в координаты в iphone

26

Я пытаюсь геокодировать адрес в координаты, используя следующий код:

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:@"6138 Bollinger Road, San Jose, United States" completionHandler:^(NSArray* placemarks, NSError* error){
                     for (CLPlacemark* aPlacemark in placemarks)
                     {
                         // Process the placemark.
                         NSString *latDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.latitude];
                         NSString *lngDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.longitude];
                         lblDestinationLat.text = latDest1;
                         lblDestinationLng.text = lngDest1;
                     }
                 }];

Я пробовал это много раз, но отладчик никогда не входит в блок, и я не могу получить местоположение. Может кто-нибудь, пожалуйста, помогите мне с этим?

С уважением
Панкай

@ user3722523 вам нужно будет определить переменную вне блока и пометить ее как __block. Теперь вы сможете получить доступ к переменной внутри блока и сохранить значения в этой переменной. pankaj
как сохранить долготу и широту в переменной за пределами этого блока плз ?? Потому что мне нужно передать их другому контроллеру. user3722523
Большое спасибо, потратив полдня, я нашел решение по вашему вопросу. Итак, один знак ВВЕРХ и Звезды за ваш вопрос. Еще раз спасибо. Ankit Jain
@pankaj Я использую swift, а __block больше не существует. user3722523

Ваш Ответ

3   ответа
0

Я просто запустил этот точный код, и он работал как ожидалось. Убедитесь, что у вас есть активное подключение к Интернету.

Попробуйте добавить NSLog в строки и посмотрите, будет ли он вызван.

NSLog(@"lat: %@, lng: %@", latDest1, lngDest1);

Вы запускаете его в симуляторе или на устройстве?

0

Блоки - это новые возможности Objective C, начиная с iOS4.0. Блок, который вы можете представить как метод делегата, работающий в том же функциональном блоке. Как и для любого метода делегата, требуется время для вызова, в зависимости от условия, так же, как блок выполняет код внутри него, когда завершает свою работу геокодирования. Вы можете прочитать больше о блоке в документации на яблоки или прочитатьhttp://www.raywenderlich.com/9438/how-to-use-blocks-in-ios-5-tutorial-part-2.

Вы также можете заглянуть в мой репозиторий на GITHUBhttps://github.com/Mangesh20/geocoding

10

Хорошо, я нашел свою ошибку. Код правильный и работает отлично. Все время я работал над этим через отладчик и пытался выяснить, почему отладчик не вошел в блок. Но теперь я обнаружил, что отладчик не входит в блок в тот момент. Это займет немного в получении значений местоположения. Это делается асинхронно, поэтому я не смог найти его, и у меня возникали сбои из-за отсутствия значений сразу после сбоя. Я переместил свой блок поста кода внутрь блока, и теперь у меня все работает нормально.

Похожие вопросы