Je prendrais une approche différente. Voici comment je le ferais:
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
se trouvent here
Pourquoi est-ce mieux? Il existe plusieurs raisons:
- Les clés d'une chaîne de requête doivent être codées en URL. Certes, pour le moment, il ne s'agit que d'une lettre ASCII, mais pouvez-vous garantir qu'ils le seront toujours?
- Les valeurs d'une chaîne de requête doivent être codées en URL. En ce moment, vous essayez seulement d'encoder plus les espaces. Que faire si votre adresse contient un
&
ou =
? Il serait inhabituel pour une adresse, mais pas impossible (en particulier le &
dans un nom de rue).
- Ceci est hautement extensible. Si vous décidez d'ajouter le support pour l'adresse étrangère et avez besoin de plus qu'une simple adresse ASCII, il est plutôt trivial d'ajouter l'objet
@"UTF-8"
et @"oe"
et la clé au dictionnaire pour inclusion dans la chaîne de requête.
- Le pour cent de codage (si vous utilisez la méthode de la catégorie liée ci-dessus) est plus précis que
stringByAddingPercentEscapesUsingEncoding:
Merci Dave. C'est beau code. J'ai ajouté le, nil après @ "t" sur la ligne 2. Cependant, je reçois "avertissement: 'NSString' peut ne pas répondre à '-URLEncodedString_ch'" –
@Mike whoops! Merci d'avoir attrapé la sentinelle manquante. :) Comme pour l'avertissement, vous devez créer une catégorie 'NSString' et déclarer la méthode dans le fichier .h, puis copier l'implémentation dans l'autre poste dans le fichier .m, puis' # importer 'le fichier .h dans partout où vous allez utiliser la méthode. –
Désolé, j'ai copié le NSString mais j'ai oublié de le déclarer dans le fichier .h. Je vais essayer ça maintenant. –