2010-06-14 7 views
17

Estoy intentando acceder al servicio de geocodificación de reenvío de google maps desde mi aplicación de iPhone. Cuando intento hacer un NSURL a partir de una cadena con una tubería, obtengo un puntero nulo.Cómo hacer un NSURL que contiene un | (personaje de tubería)?

NSURL *searchURL = [NSURL URLWithString:@"http://maps.google.com/maps/api/geocode/json?address=6th+and+pine&bounds=37.331689,-122.030731|37.331689,-122.030731&sensor=false"]; 

No veo otra forma en la API de Google para enviar las coordenadas de los límites con un tubo. ¿Alguna idea sobre cómo puedo hacer esto?

Respuesta

29

¿Ha intentado reemplazar la tubería con %7C (el valor codificado en la URL del char |)?

+1

sí que funcionaba. gracias, soy un novato de url completo. – aks

+4

NSString no tiene un - stringByAddingPercentEscapesUsingEncoding: método que hace eso por usted? –

+0

doh. eso es exactamente lo que necesitaba, simplemente no sabía sobre el porcentaje de escapes además de% 20. Gracias chicos – aks

9

Si usted quiere estar seguro de lo extraño personajes va a poner en el futuro, utilizar stringByAddingPercentEscapesUsingEncoding método para hacer que la cadena "URL-friendly" ...

NSString *rawUrlStr = @"http://maps.google.com/maps/api/geocode/json?address=6th+and+pine&bounds=37.331689,-122.030731|37.331689,-122.030731&sensor=false"; 
NSString *urlStr = [rawUrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *searchURL = [NSURL URLWithString:urlStr]; 
13

Como stringByAddingPercentEscapesUsingEncoding es obsoleto, que debiera use stringByAddingPercentEncodingWithAllowedCharacters.

respuesta Swift:

let rawUrlStr = "http://maps.google.com/maps/api/geocode/json?address=6th+and+pine&bounds=37.331689,-122.030731|37.331689,-122.030731&sensor=false"; 
let urlEncoded = rawUrlStr.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 
let url = NSURL(string: urlEncoded) 

Edición: 3 Swift respuesta:

let rawUrlStr = "http://maps.google.com/maps/api/geocode/json?address=6th+and+pine&bounds=37.331689,-122.030731|37.331689,-122.030731&sensor=false"; 
if let urlEncoded = rawUrlStr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) { 
    let url = NSURL(string: urlEncoded) 
} 
Cuestiones relacionadas