114 votes

Obtenir des parties d'un NSURL dans objective-c

J'ai un NSString avec la valeur de

 http://digg.com/news/business/24hr
 

Comment puis-je tout obtenir avant le 3ème niveau?

 http://digg.com/news/
 

428voto

zneak Points 45458

Ce n'est pas exactement le troisième niveau, vous l'esprit. Une URL est divisé de cette manière:

  • le protocole ou de régime (ici, http)
  • l' :// délimiteur
  • le nom d'utilisateur et le mot de passe (ici il n'y a pas tout, mais il pourrait être username:password@hostname)
  • le nom de l'hôte (ici, digg.com)
  • le port (ce qui serait le :80 après le nom de domaine par exemple)
  • le chemin d'accès (ici, /news/business/24hr)
  • la chaîne de paramètre (tout ce qui suit un point-virgule)
  • la chaîne de requête (ce serait si vous aviez des paramètres comme ?foo=bar&baz=frob)
  • le fragment (ce serait si vous aviez un point d'ancrage dans le lien, comme #foobar).

Un "complet" de l'URL ressemblera à ceci:

http://foobar:nicate@example.com:8080/some/path/file.html;params-here?foo=bar#baz

NSURL a un large éventail d'accesseurs. Vous pouvez les vérifier dans la documentation de l' NSURL classe, la section Accès à l'Parties de l'URL. Pour une référence rapide:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (tout le contenu de // à la fin de l'URL)
  • -[NSURL user] = foobar
  • -[NSURL password] = communiquent
  • -[NSURL host] = example.com
  • -[NSURL port] = 8080
  • -[NSURL path] = /some/path/file.html
  • -[NSURL pathComponents] = @["/", "certains", "chemin", "file.html"] (à noter que la première / en fait partie)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = params-ici
  • -[NSURL query] = foo=bar
  • -[NSURL fragment] = baz

Ce que vous voulez, cependant, est quelque chose comme ça:

NSURL* url = [NSURL URLWithString:@"http://digg.com/news/business/24hr"];
NSString* reducedUrl = [NSString stringWithFormat:
    @"%@://%@/%@",
    url.scheme,
    url.host,
    url.pathComponents[1]];

Pour votre exemple d'URL, ce que vous semblez vouloir, c'est le protocole, l'hôte et le premier composant du chemin. (L'élément à l'indice 0 du tableau retourné par -[NSString pathComponents] est tout simplement "/", de sorte que vous aurez envie de l'élément à l'indice 1. Les autres barres obliques sont ignorés.)

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