2012-05-24 13 views
25

que estoy tratando de codificación geográfica de direcciones en coordenadas utilizando siguiente código:geocodificación de direcciones en coordenadas en 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; 
        } 
       }]; 

lo he intentado muchas veces pero el depurador no entra en el bloque y no soy capaz de obtener la ubicación . ¿Alguien puede ayudarme con eso?

Saludos
Pankaj

+0

Gracias tanto, después de pasar medio día llegué a la solución de su pregunta. Así que una marca UP y Star para su pregunta. Gracias de nuevo. –

+0

cómo guardar la longitud y la latitud en una variable fuera de este bloque por favor? Porque necesito pasarlos a otro controlador. – user3722523

+0

@ user3722523 tendrá que definir una variable fuera del bloque y marcarlo como __block. Ahora podrá acceder a la variable dentro del bloque y puede guardar valores en esta variable. – pankaj

Respuesta

10

Bien, encontré mi error. El código es correcto y funciona perfecto. Todo el tiempo que estuve trabajando fue a través del depurador y estaba tratando de descubrir por qué el depurador no ingresó al bloque. Pero ahora descubrí que el depurador no ingresa al bloque en ese momento. Se necesita poco para obtener los valores de ubicación. Se hace de forma asíncrona, así que no pude encontrarlo y me estaba bloqueando debido a que no había ningún valor justo después del bloqueo. He movido mi bloque de publicación de código al interior del bloque y ahora todo funciona bien para mí.

0

que acaba de ejecutar ese código exacto y funcionó como se esperaba. Asegúrese de tener una conexión a Internet activa.

Intente agregar un NSLog en las cadenas y vea si recibe una llamada.

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

¿Lo está ejecutando en el simulador o en el dispositivo?

0

Los bloques son nuevas características de Objective C desde iOS4.0 en adelante. Un bloque que puedes imaginar como un método delegado que funciona en el mismo bloque funcional. En cuanto a cualquier método delegado, lleva tiempo invocar, dependiendo de la condición, del mismo modo en que el bloque ejecuta el código dentro de él, cuando completa su trabajo de geocodificación. Puede leer más sobre Block in apples documentation o leer http://www.raywenderlich.com/9438/how-to-use-blocks-in-ios-5-tutorial-part-2.

También puede haber mirar en mi repositorio en GitHub https://github.com/Mangesh20/geocoding

Cuestiones relacionadas