2010-06-14 16 views
17

Sto provando ad accedere al servizio di geocoding in avanti di google maps dalla mia app per iPhone. Quando provo a creare un NSURL da una stringa con una pipe, ottengo solo un puntatore nullo.Come creare un NSURL che contiene un | | (carattere pipe)?

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

Non vedo nessun altro modo in google api per inviare le coordinate di limite con una pipe. Qualche idea su come posso fare questo?

risposta

29

Hai provato a sostituire il tubo con %7C (il valore codificato dell'URL per il char |)?

+1

sì che ha funzionato. ha grazie, sono un url completo noob. – aks

+4

La stringa NSString non ha un - stringByAddingPercentEscapesUsingEncoding: metodo che lo fa per te? –

+0

doh. questo è esattamente ciò di cui avevo bisogno, semplicemente non sapevo delle fughe percentuali oltre a% 20. Grazie ragazzi – aks

9

Se vuoi essere sicuro per qualsiasi carattere strano si metterà in futuro, utilizzare stringByAddingPercentEscapesUsingEncoding metodo per rendere la stringa "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

Come stringByAddingPercentEscapesUsingEncoding è deprecato, si dovrebbe utilizzare stringByAddingPercentEncodingWithAllowedCharacters.

risposta 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) 

Edit: Swift 3 risposta:

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) 
} 
Problemi correlati