Holen Sie sich Teile einer NSURL in Ziel-c


114

Ich habe einen NSString mit dem Wert von

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

Wie kann ich alles vor dem 3. Level bekommen?

http://digg.com/news/

Antworten:


435

Dies ist nicht gerade die dritte Ebene, wohlgemerkt. Eine URL wird folgendermaßen aufgeteilt:

  • das Protokoll oder Schema (hier http)
  • das ://Trennzeichen
  • den Benutzernamen und das Passwort (hier gibt es keine, aber es könnte sein username:password@hostname)
  • der Hostname (hier digg.com)
  • der Port (das wäre zum Beispiel :80nach dem Domainnamen)
  • der Weg (hier /news/business/24hr)
  • die Parameterzeichenfolge (alles, was einem Semikolon folgt)
  • die Abfragezeichenfolge (das wäre, wenn Sie GET-Parameter wie hätten ?foo=bar&baz=frob)
  • das Fragment (das wäre, wenn Sie einen Anker in der Verbindung, wie gehabt #foobar).

Eine "voll funktionsfähige" URL würde folgendermaßen aussehen:

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

NSURLhat eine breite Palette von Accessoren. Sie können sie in der Dokumentation für die NSURLKlasse im Abschnitt Zugriff auf die Teile der URL überprüfen . Zum schnellen Nachschlagen:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (alles von // bis zum Ende der URL)
  • -[NSURL user] = foobar
  • -[NSURL password] = nicate
  • -[NSURL host] = example.com
  • -[NSURL port] = 8080
  • -[NSURL path] = /some/path/file.html
  • -[NSURL pathComponents] = @ ["/", "some", "path", "file.html"] (beachte, dass das initiale / ein Teil davon ist)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = params-hier
  • -[NSURL query] = foo = bar
  • -[NSURL fragment] = baz

Was Sie jedoch wollen, ist so etwas:

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

Für Ihre Beispiel-URL scheinen Sie das Protokoll, den Host und die erste Pfadkomponente zu wollen. (Das Element am Index 0 in dem von zurückgegebenen Array -[NSString pathComponents]ist einfach "/", daher möchten Sie das Element am Index 1. Die anderen Schrägstriche werden verworfen.)


9
Für alle, die dies lesen: Sie müssen [url.pathComponents objectAtIndex:1]anstelle von Index erhalten 0, da die Schrägstriche tatsächlich Elemente des Arrays sind, wodurch der Code in dieser Antwort ausgegeben wirdhttp://digg.com//
Dima

@ Dima, guter Fang. Es wird jedoch nur der erste Schrägstrich als Pfadkomponente betrachtet, die anderen werden verworfen. Ich bin mir jedoch nicht sicher warum.
Zneak

Guter Fang auch von Ihrer Seite! Ich habe es nicht einmal mit nur einem überprüft.
Dima

Fehlt uns der Dateiname in der Aufzählungspunktliste? In diesem Beispiel file.htmlist nicht in den Aufzählungspunkten aufgeführt - ich sehe, wir springen vom Pfad zur Abfragezeichenfolge ...
Brett

2
digg.com? Wie alt ist dieser Beitrag! ;-)
Veralteter Darren

7

Mit Playground, Sprache schnell, habe ich das! Der Spielplatz bietet eine interaktive Möglichkeit, dies in Aktion zu sehen. Ich hoffe, Sie können das Gleiche tun, eine unterhaltsame Möglichkeit, NSURL zu lernen, ein wichtiges Thema in iOS.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.