2010-05-31 11 views
6

Actualmente estoy desarrollando una aplicación de iPhone que tengo que mostrar la ciudad y la ubicación actual del usuario para el que estoy usando MapKit Framework.When construyo la aplicación que funciona bien y me muestran los detalles exactos de la ciudad. pero en este momento cuando intento de construir de nuevo la aplicación muestra la aplicación siguiente mensaje de error en mi registroservidor MKReverseGeocoder error devuelto: 503

/SourceCache/ProtocolBuffer_Sim/ProtocolBuffer-26/Runtime/PBRequester.m:523 servidor de error devuelto: 503

reverseGeocoder: didFailWithError: Error Domain = PBRequesterErrorDomain Code = 6001 "La operación no se pudo completar. (PBRequesterErrorDomain error 6001.)"

¿Algún cuerpo enfrenta el mismo problema y cómo puedo resolverlo?

+0

Me enfrento a este problema ahora. Encontrado una forma de evitarlo? – Neelesh

Respuesta

9

Estoy bastante seguro de que esto está sucediendo porque usted está en pruebas, y utilizando el codificador geográfico inverso demasiado y los servidores de Google lo sabe. Entonces, básicamente te ha bloqueado por un tiempo. Inténtalo más tarde y mira si funciona.

Debe asegurarse de no estar llamando al geocodificador más de una vez cada 60 segundos.

+0

Hola, Nic tienes razón, la aplicación muestra este mensaje de error hasta la 1 PM en la India y después de eso funciona bien, creo que Google puede estar actualizando su servidor en este momento. – raaz

+0

Bueno, marque esta respuesta como respondida. –

+0

¿Es eso seriamente la razón? Tengo un pin que el usuario puede arrastrar y se actualiza con la nueva dirección ... Si este es el caso, el usuario no podrá arrastrar el pin y verlo actualizar a menos que sea menos de una vez cada 60 segundos...! – jowie

0

Puede suceder al azar, dependiendo del estado del servidor.

2

¡Lo sé!
Bueno, ahora tendremos que usar CLGeocoder, pero si aún quiere usar MKReverseGeocoder, NO DEBE invocar [inicio del geocodificador] dos veces, ¡incluso si el objeto de geocodificación es nuevo! Por ejemplo, NO hacer esto:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
     MKReverseGeocoder *geoCoder = [[[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate] autorelease]; 
     geoCoder.delegate = self; 
     [geoCoder start]; 
} 

O obtendrá un arror: la función de actualización de posición de jefe de locación está siendo llamada tan pronto como se detecte una nueva posición. A medida que la precisión se vuelve cada vez mejor, se envía una nueva nueva ubicación a "didUpdateToLocation".
¡Pero crear un nuevo objeto MKReverseGeocoder cada vez que se encuentra una posición es una mala idea! Entonces, tiene algunas soluciones:
- Ponga un booleano que sea verdadero cuando se inicia el geocodificador. Luego, en didFindPlacemark (geocodificador), debe detener el geocodificador con [geocoder cancel] y establecer su booleano en falso.
- Hacer que el geocodificador sea variable no local y gestionar un [cancelar geocodificador] + liberar y crear uno nuevo y [inicio geocodificador] cada vez que se llame a updateUpdateToLocation.
- Cualquier otra forma de evitar [inicio geocodificador] para ser llamado dos veces

he utilizado la primera solución y nunca obtener el error 503 más.

+0

Lamentablemente no funcionó para mí. Incluso cancelando cada vez, el MKReverseGeocoder arroja un 503 si se llama con demasiada frecuencia. – jowie

2

Para mí, MKReverseGeocoder estaba fallando con 503 demasiadas veces. También fallaría la primera vez que se solicitó, mucho después de que hubieran transcurrido 60 segundos. Como resultado, decidí dejar de usarlo y en su lugar decidí acceder a la API de Google directamente usando NSURLRequest a través de un servicio que creé que también analiza el resultado como una cadena JSON usando el marco SBJSON (muy útil).

Desde mi servicio, me llaman a la siguiente dirección URL de la siguiente manera:

NSString *urlStr = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=true", coordinate.latitude, coordinate.longitude]; 

donde coordinate es una CLLocationCoordinate2D.

Me doy cuenta de que este es un largo camino alrededor del problema, pero desde la conversión a este sistema no he tenido ningún problema.

+0

¡Esta es una muy buena alternativa a 'MKReverseGeocoder'! – venj

Cuestiones relacionadas