Я бы выбрал другой подход. Вот как я это сделаю:
NSString * q = [NSString stringWithFormat:@"%@ %@, %@", self.address, self.city, self.state];
NSDictionary * queryDictionary = [NSDictionary dictionaryWithObjectsAndKeys:q, @"q", @"h", @"t", nil];
NSMutableArray * fields = [NSMutableArray array];
for (NSString * key in queryDictionary) {
NSString * value = [queryDictionary objectForKey:key];
NSString * encoded = [NSString stringWithFormat:@"%@=%@", [key URLEncodedString_ch], [value URLEncodedString_ch]];
[fields addObject:encoded];
}
NSString * queryString = [fields componentsJoinedByString:@"&"];
NSString * googleString = [NSString stringWithFormat:@"http://maps.google.com?%@", queryString];
NSURL * googleURL = [NSURL URLWithString:googleString];
[[UIApplication sharedApplication] openURL:googleURL];
-URLEncodedString_ch
можно найти здесь
Почему это лучше? Есть несколько причин:
- Ключи в строке запроса должны быть в кодировке URL. Конечно, сейчас это всего лишь одна буква в наборе ASCII, но можете ли вы гарантировать, что они всегда будут?
- Значения в строке запроса должны быть в кодировке URL. Прямо сейчас вы пытаетесь только кодировать пробелы. Что если ваш адрес содержит
&
или =
? Это было бы необычно для адреса, но не невозможно (особенно &
в названии улицы).
- Это очень расширяемый. Если вы решили добавить поддержку внешнего адреса и вам нужно больше, чем простой адрес ASCII, добавить тривиальный объект
@"UTF-8"
и @"oe"
и словарь в словарь для включения в строку запроса довольно просто.
- Кодировка процента (если вы используете метод категории, связанный с указанным выше) более точна, чем
stringByAddingPercentEscapesUsingEncoding: