iPhone-SDK: Überprüfen Sie die Gültigkeit von URLs mit NSURL nicht funktioniert?
Ich versuche zu überprüfen ob eine bestimmte URL gültig ist und ich mache es so:
- (BOOL)urlIsValid:(NSString *)address {
NSURL *testURL = [NSURL URLWithString:address];
if (testURL == nil) {
return NO;
}
else {
return YES;
}
}
Da "URLWithString" soll return "null", wenn die URL ungültig ist, ich dachte das würde funktionieren, aber es nicht aus irgendeinem Grund. Könnte mir bitte jemand sagen, warum?
Vielen Dank im Voraus!
Fehlerhaftes, auf welche Weise? Könntest du posten, was man einstellen
Adresse kann eine beliebige Art von Zeichenfolge durch den Benutzer eingegeben werden.
Chris, poste bitte eine demo von etwas, das sollte die Validierung fehlschlagen, aber nicht.
Dies ist eine gute Lösung: stackoverflow.com/questions/3791067/check-url-validity
address
?Adresse kann eine beliebige Art von Zeichenfolge durch den Benutzer eingegeben werden.
Chris, poste bitte eine demo von etwas, das sollte die Validierung fehlschlagen, aber nicht.
Dies ist eine gute Lösung: stackoverflow.com/questions/3791067/check-url-validity
InformationsquelleAutor Chris | 2011-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Geniale Antwort ! Dies ist die perfekte Lösung !
Diese noch funktioniert, aber NSURLConnection zu sein scheint veraltet jetzt. Sie kennen eine Lösung, die mit NSURLSession oder etwas, das nicht veraltet?
nacho4d, NSURLSession ist der Ersatz für NSURLConnection
InformationsquelleAutor Adam Shiemke
überprüfen diese Methode funktioniert gut für mich
}
InformationsquelleAutor Sanjeev sharma
Ich denke, Sie verwechselt werden können, in Bezug auf die definition von "fehlerhaften". Alles konform zu RFC 2396 als gültig betrachtet wird; in der Praxis scheint es NSURL auch akzeptieren
[
und]
trotz Ihrer nicht erlaubt, durch den RFC.Das bedeutet, dass so ziemlich jede Zeichenkette aus druckbaren ASCII-Zeichen außer space,
"
,%
wenn nicht gefolgt von zwei hex-Ziffern,<
,>
,\
,^
,`
,{
,|
, und}
wird als "gültig" angesehen, obwohl es keine absoluten oder allgemein nützlich sind. Strings mit mehreren#
kann auch abgelehnt werden.InformationsquelleAutor Anomie
Es gibt keine gute Erklärung dafür, den code, den Sie zur Verfügung gestellt sieht vollkommen in Ordnung und sollten für den Zweck funktionieren Sie erklären sind.
Mit fehlerhaften URLs, meinst du URLs führen zu einem 404-Fehler, oder URLs mit Ungültiger Formatierung oder Zeichen?
Geben ein Beispiel für eine fehlerhafte URL, die gibt ja in dieser Funktion.
InformationsquelleAutor Emil
In meiner Erfahrung, die NSURL Erstellung von Routinen in der Regel eine exception werfen, statt der Rückgabe von null. Aber die wirkliche Frage in diesem Fall ist was ist eine ungültige URL? Sind Sie auf der überprüfung, ob eine Ressource vorhanden ist, oder überprüfen, ob die Struktur der Zeichenfolge entspricht den einschlägigen RFCs?
Mit Bezug auf die erste Frage, die ich erwähnt, beim erstellen von URLs, die ich nicht manuell eingeben, auf mich selbst, dass ich in der Regel tun dies:
Wenn ich versuche eine URL zu erstellen, die mit [NSURL URLWithString: @"argleblargle"] es wirft. Dann wieder, in nahezu allen meinen iOS-Programmierung habe ich immer alloc/init und explizit freigeben, so ist es vielleicht nur Würfe aus -initWithString:
Weder
[NSURL URLWithString: @"argleblargle"]
noch[[NSURL alloc] initWithString: @"argleblargle"]
eine exception wirft, wenn ich versuche es hier. Die Dokumentation weist ausdrücklich darauf hin, dassURLWithString:
zurück null. Sind Sie sicher, dass etwas anderes in deinem code nicht werfen, wenn Sie übergeben einen null-NSURL?Es ist immer geworfen für mich. Vielleicht ist es geändert in einer späteren iOS-version? Ich habe die wickeln alle NSURL Initialisierung mit try/catch-loops seit iOS 2.0, und die Ausnahmen generiert wurden NSInvalidArgumentExceptions mit Gründen zu erwähnen -[NSURL initWithString:]. Vielleicht war es einfach nur fest in iOS 4.x.
Es ist ein Hinweis im Apple NSURL Klasse Referenz für URLWithString Referenz-Angabe "von Mac OS X v10.7 und höher oder iOS 5 und höher, diese Methode liefert nil, wenn die URL-Zeichenfolge ist null. In früheren Versionen, löst diese Methode eine Ausnahme aus, wenn die URL-Zeichenfolge ist gleich null."
InformationsquelleAutor Jim Dovey