2012-04-04 10 views
2

Ich erstelle eine NSURLConnection, aber mit einer ungültigen URL (http://thiswontwork.com/asdf). Ich rufe es auf dem Hauptthread an und ich habe alle Delegate-Methoden in meinem Delegaten implementiert.NSURLConnection hängt mit ungültiger URL

Die Verbindung hängt und ruft nie eine der Delegate-Methoden, hätte ich erwartet, connection:didFailWithError: aufgerufen werden. Der einzige Delegatmethode genannt ist

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse 

hat über so etwas jemand kommen?

passiert unter Debugger auf Gerät und im Simulator (iOS5 auf xCode4).

Haben Sie einen trivialen View-Controller mit einem einzigen Knopf Beispiel erstellt, um zu demonstrieren, kann Code bei Bedarf buchen.

Das Timeout-Intervall wird für die Anforderung festgelegt (bis 30 Sekunden).

+1

Wie Sie eine Verbindung erstellen, scheint es, als wäre das Problem woanders, können Sie diesen Code auch hinzufügen? – rishi

+1

Stellen Sie sicher, dass die Delegiertenmethoden, die nicht aufgerufen werden, richtig geschrieben sind. – Costique

+0

wird später Code schreiben, aber seltsamerweise, wenn ich die oben hervorgehobene Delegat-Methode entferne, werden die anderen Delegate-Methoden mit Erfolgs-Antwort-Codes aufgerufen. Ich habe einen anderen (nicht-trivialen) Code, der auch merkwürdig in NSURLConnection hängt. Es ist ein altes Projekt in nachfolgenden Projekten Ich habe eine andere Bibliothek benutzt. – gamozzii

Antwort

1

Wenn Sie nil zurückgeben, ist die Verbindung beendet. Ich bin gerade nicht vor den Docs, aber ich glaube, es ist Standard, die NSURLRequest in die Funktion zurückgegeben. Etwas wie:

-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response{ 
    return request; 
} 

bearbeiten

Nachdem in der Dokumentation suchen Ich sehe, was Sie meinen. Die Dokumentation ist extrem irreführend, was passieren wird, wenn Sie null zurückgeben. Es sagt, wenn Sie nil zurückgeben die Verbindung wird fortgesetzt, aber ich glaube, dass dies nur in dem Fall ist, wo response ist nicht Null. Ich testete die Rückgabe von nil in einem kleinen Download-Manager-Projekt, das ich geschrieben hatte, und es schien die Verbindung komplett zu blockieren.

Dies scheint entweder ein Fehler oder eine mangelhafte Dokumentation zu sein.

+0

Abgesehen davon, dass das Dokument impliziert (und meine Erfahrung scheint), dass die Methode aufgerufen werden kann, auch wenn es keine echte Umleitung ist, so müssen Sie die Antwort überprüfen - wenn die Antwort null ist, wie ich es verstehe, ist es in Ordnung, zurückzukehren Null. – gamozzii

+0

@gamozzii Ich sehe was du meinst. In Antwort bearbeitet. – NJones