2010-06-14 4 views
17

Я пытаюсь получить доступ к геокодированию google maps с моего приложения iphone. Когда я пытаюсь сделать NSURL из строки с трубкой в ​​ней, я просто получаю нулевой указатель.Как создать NSURL, который содержит | (символ трубы)?

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

Я не вижу другого способа в google api, чтобы отправить координаты границ без трубы. Любые идеи о том, как я могу это сделать?

ответ

29

Вы пробовали заменить трубку %7C (кодированное значение URL для char |)?

+1

да что работал. ha спасибо, я полный url noob. – aks

+4

У NSString нет - stringByAddingPercentEscapesUsingEncoding: метод, который делает это для вас? –

+0

doh. это именно то, что мне нужно, просто не знал о процентных побегах, кроме% 20. Спасибо, парни – aks

9

Если вы хотите, чтобы быть безопасными для любых странных символов, которые вы будете ставить в будущем использовать stringByAddingPercentEscapesUsingEncoding метод, чтобы сделать строку «URL-дружественный» ...

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

Как stringByAddingPercentEscapesUsingEncoding осуждаются, вы должны использование stringByAddingPercentEncodingWithAllowedCharacters.

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 Ответ:

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) 
} 
Смежные вопросы