2010-06-14 6 views
17

Próbuję uzyskać dostęp do usługi geokodowania w kierunku Google Maps z mojej aplikacji na iPhone'a. Kiedy próbuję zrobić NSURL z ciągu z rurką w nim po prostu dostaję zerowy wskaźnik.Jak zrobić NSURL zawierający | (postać rury)?

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

Nie widzę żadnego innego sposobu w Google api do wysyłania współrzędnych granic bez rury. Wszelkie pomysły na temat tego, w jaki sposób mogę to zrobić?

Odpowiedz

29

Czy próbowałeś wymienić rurę na %7C (zakodowaną wartość adresu URL dla znaku |)?

+1

tak to działało. ha, dziękuję, jestem kompletnym noobem. – aks

+4

Czy NSString nie ma metody - stringByAddingPercentEscapesUsingEncoding: która to robi dla ciebie? –

+0

doh. to jest dokładnie to, czego potrzebowałem, po prostu nie wiedziałem o procentowych ucieczkach poza% 20. Dzięki chłopaki – aks

9

Jeśli chcesz być bezpieczny dla cokolwiek dziwne postacie będzie można umieścić w przyszłości używać stringByAddingPercentEscapesUsingEncoding sposób, aby napis „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

Jak stringByAddingPercentEscapesUsingEncoding jest przestarzała, należy użyj stringByAddingPercentEncodingWithAllowedCharacters.

odpowiedź 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 odpowiedź:

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