94 votes

URLWithString : renvoie nil

C'est peut-être très facile, mais je n'ai pas l'air de trouver pourquoi c'est URLWithString: qui ne donne rien ici.

//localisationName is a arbitrary string here
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false&key=", webName];
NSURL* url = [NSURL URLWithString:stringURL];

1 votes

Quelle est la valeur de webName avant votre appel à stringWithFormat: ? Alors, quelle est la valeur de stringURL avant votre appel à URLWithString: ? Utilisez NSLog() pour les imprimer pas à pas, ou pour définir des points d'arrêt et inspecter les valeurs au fur et à mesure qu'elles sont définies.

201voto

gerry3 Points 15696

Vous devez également échapper les caractères non ASCII dans votre URL codée en dur :

//localisationName is a arbitrary string here
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false", webName];
NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* url = [NSURL URLWithString:webStringURL];

Vous pouvez probablement supprimer l'échappement du nom de localisation puisqu'il sera traité par l'échappement de la chaîne entière.

0 votes

J'essaie de comprendre pourquoi URLWithString donne zéro ici. La documentation d'Apple indique "Doit être une URL conforme à la RFC 2396. Cette méthode analyse l'URLString conformément aux RFC 1738 et 1808". Je fais quelques lectures...

1 votes

LOL, j'ai copié une URL d'un email et c'est arrivé ! Merci.

1 votes

Casse si l'URL contient un #. stringByAddingPercentEscapesUsingEncoding convertit # en %2

41voto

Islam.Ibrahim Points 251

Utilisez cette fonction si vous traitez des fichiers enregistrés dans le gestionnaire de fichiers.

NSURL *_url = [NSURL fileURLWithPath:path];

0 votes

MERCI ! J'avais l'impression d'être "coupé au milieu".

8voto

Yuji Points 26887

Je suppose que vous devez utiliser -[NSString stringByAddingPercentEscapesUsingEncoding:] . Voir Document sur les pommes .

Un autre commentaire est que, en tant qu'ancien, je trouve un peu gênant de mettre des caractères non ASCII dans un fichier source. Cela dit, ce Document sur les pommes indique qu'à partir de la version 10.4, les chaînes UTF-16 sont acceptables à l'intérieur des fichiers @"..." . D'une certaine manière, GCC semble convertir correctement le fichier source en Latin-1 en UTF-16 dans le binaire, mais je pense qu'il est plus sûr d'utiliser les caractères ASCII 7 bits uniquement dans le code source, et d'utiliser NSLocalizedString .

2voto

Ben Gottlieb Points 59900

Je pense que vos caractères accentués perturbent les choses ; ils ne seront pas traités par -stringByAddingPercentEscapesUsingEncoding :.

0voto

Iggy Points 1277

L'appel URLWithString : retournera un nil si la chaîne qui lui est passée est malformée. Puisque NSURL renvoie un nil pour les urls malformées, NSLog votre chaîne et définissez des points d'arrêt pour voir exactement ce qui est passé à votre méthode de création NSURL. Si votre URLWithString fonctionne avec une valeur codée en dur, c'est une preuve supplémentaire que ce que vous passez est malformé. véase

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X