2012-05-24 4 views
25

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

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; 
        } 
       }]; 

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

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

+0

спасибо, проведя полдень я получил к решению от вашего вопроса. Итак, один знак UP и Star для вашего вопроса. Еще раз спасибо. –

+0

как сохранить долготу и широту в переменной вне этого блока plz ?? Потому что мне нужно передать их другому контроллеру. – user3722523

+0

@ user3722523 вам нужно будет определить переменную за пределами блока и пометить ее как __block. Теперь вы сможете получить доступ к переменной внутри блока, и вы можете сохранить значения для этой переменной. – pankaj

ответ

10

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

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.

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

Смежные вопросы