2010-12-11 2 views
2

Je veux utiliser cela, mais besoin d'une solution pour cette ..fonction simple pour remplacer toutes les occurrences d'espaces dans une chaîne avec plus (+) signes iPhone OS

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

Je dois remplacer tous les espaces dans l'adresse, la ville et les valeurs d'état avec des signes plus pour obtenir google maps au travail.

Merci

Répondre

3

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:

  1. 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?
  2. 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).
  3. 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.
  4. 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:
+0

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'" –

+0

@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. –

+0

Désolé, j'ai copié le NSString mais j'ai oublié de le déclarer dans le fichier .h. Je vais essayer ça maintenant. –

0

Jetez un oeil à NSString de stringByReplacingOccurrencesOfString:withString: et replaceOccurrencesOfString:withString:options:range: de NSMutableString.

4
googleAddress = [googleAddress stringByReplacingOccurancesOfString:@" " withString:@"+"]; 
+0

googleAddress = [googleAddress stringByReplacingOccurrencesOfString: @ " "withString: @" +"]; Merci Brad. C'est une bonne solution d'arrêt d'écart. Je peux revenir à ce code plus tard demain. Regardez l'orthographe ... Il n'y a pas de "a" et un second "r" est dans les occurrences. Passe une excellente nuit. –

+0

Ceci est une bonne solution temporaire (et il répond explicitement et correctement à la question), mais c'est subtilement la mauvaise réponse. Le format d'une URL est un peu plus complexe que de simplement remplacer "" par "+". –

+0

True. Je l'ai juste utilisé comme preuve de concept. Maintenant, je peux montrer au mec marketing comment il est supposé fonctionner avant de le réparer correctement. Merci encore Dave. –

Questions connexes