Простая функция для замены всех вхождений пробелов в строке со знаком плюс (+) в iPhone OS - PullRequest
2 голосов
/ 11 декабря 2010

Я хочу использовать это, но мне нужно решение для этого ..

NSString *googleAddress = @"http://maps.google.com?q=";
googleAddress = [googleAddress stringByAppendingString:self.address];
googleAddress = [googleAddress stringByAppendingString:@"+"];
googleAddress = [googleAddress stringByAppendingString:self.city];
googleAddress = [googleAddress stringByAppendingString:@",+"];
googleAddress = [googleAddress stringByAppendingString:self.state];
googleAddress = [googleAddress stringByAppendingString:@"&t=h"];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:googleAddress]];

Мне нужно заменить все пробелы в адресе, городе и штатах со знаком плюс, чтобы заставить работать карты Google.

Спасибо

Ответы [ 4 ]

4 голосов
/ 11 декабря 2010
googleAddress = [googleAddress stringByReplacingOccurancesOfString:@" " withString:@"+"];
3 голосов
/ 11 декабря 2010

Я бы выбрал другой подход. Вот как я это сделаю:

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 можно найти здесь

Почему это лучше? Есть несколько причин:

  1. Ключи в строке запроса должны быть в кодировке URL. Конечно, сейчас это всего лишь одна буква в наборе ASCII, но можете ли вы гарантировать, что они всегда будут?
  2. Значения в строке запроса должны быть в кодировке URL. Прямо сейчас вы пытаетесь только кодировать пробелы. Что если ваш адрес содержит & или =? Это было бы необычно для адреса, но не невозможно (особенно & в названии улицы).
  3. Это очень расширяемый. Если вы решили добавить поддержку внешнего адреса и вам нужно больше, чем простой адрес ASCII, добавить тривиальный объект @"UTF-8" и @"oe" и словарь в словарь для включения в строку запроса довольно просто.
  4. Кодировка процента (если вы используете метод категории, связанный с указанным выше) более точна, чем stringByAddingPercentEscapesUsingEncoding:
0 голосов
/ 13 марта 2012

Этот фрагмент может быть полезен для некоторых людей, тем более что Google обрабатывает + и% 20 одинаково.

NSString *escapedUrlString =
   [unescapedString stringByAddingPercentEscapesUsingEncoding:
                    NSASCIIStringEncoding];

Источник: http://blog.evandavey.com/2009/01/how-to-url-encode-nsstring-in-objective-c.html

0 голосов
/ 11 декабря 2010

Посмотрите на NSString stringByReplacingOccurrencesOfString:withString: и NSMutableString replaceOccurrencesOfString:withString:options:range:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...