Ich habe eine Anwendung, die auf Xcode6-Beta1 und Xcode6-Beta2 mit iOS7 und iOS8 gut funktioniert. Aber mit Xcode6-Beta3, Beta4, Beta5 habe ich Netzwerkprobleme mit iOS8, aber unter iOS7 funktioniert alles einwandfrei. Ich bekomme den Fehler "The network connection was lost."
. Der Fehler ist wie folgt:
Fehler: Fehler Domain = NSURLErrorDomain Code = -1005 "Die Netzwerkverbindung wurde unterbrochen." UserInfo = 0x7ba8e5b0 {NSErrorFailingURLStringKey =, _kCFStreamErrorCodeKey = 57, NSErrorFailingURLKey =, NSLocalizedDescription = Die Netzwerkverbindung wurde unterbrochen., _KCFStreamErrorDomainKey = 1, NSUnderx7 "
Ich verwende AFNetworking 2.x und das folgende Codefragment, um den Netzwerkanruf zu tätigen:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:<example-url>
parameters:<parameteres>
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@“Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Ich habe versucht, NSURLSession
aber immer noch den gleichen Fehler erhalten.
quelle
Antworten:
Durch einen Neustart des Simulators wurde das Problem für mich behoben.
quelle
Wir hatten genau diesen Fehler und es stellte sich heraus, dass es ein Problem mit der zugrunde liegenden HTTP-Implementierung von
NSURLRequest
:Soweit wir wissen
Keep-Alive
, behält iOS 8/9/10/11, wenn es eine HTTP-Antwort mit einem Header empfängt , diese Verbindung bei, um sie später wiederzuverwenden (wie es sollte), aber es behält sie für mehr als dentimeout
Parameter des Keep-Alive-Header (die Verbindung scheint immer 30 Sekunden lang am Leben zu bleiben.) Wenn die App weniger als 30 Sekunden später eine zweite Anforderung sendet, versucht sie, eine vom Server möglicherweise unterbrochene Verbindung wiederzuverwenden (wenn mehr als das RealeKeep-Alive
vergangen ist).Hier sind die Lösungen, die wir bisher gefunden haben:
KeepAliveTimeout
Option erfolgen.BrowserMatch "iOS 8\." nokeepalive
in der Mod-Dateisetenvif.conf
).Connection: close
Header zu senden. Dadurch wird der Server angewiesen, die Verbindung sofort zu trennen und ohne Keep-Alive-Header zu antworten. ABER im Moment scheint NSURLSession denConnection
Header zu überschreiben, wenn die Anforderungen gesendet werden (wir haben diese Lösung nicht ausführlich getestet, da wir die Apache-Konfiguration optimieren können).quelle
NSURLErrorNetworkConnectionLost
Konstante anstelle der Hardcodierung verwenden-1005
.Bei mir
Resetting content and settings
funktioniert Simulator. Gehen Sie folgendermaßen vor, um den Simulator zurückzusetzen:quelle
Die Laufzeit des iOS 8.0-Simulators weist einen Fehler auf. Wenn sich Ihre Netzwerkkonfiguration während des Startvorgangs des simulierten Geräts ändert, denken übergeordnete APIs (z. B. CFNetwork) in der simulierten Laufzeit, dass die Netzwerkverbindung verloren gegangen ist. Derzeit wird empfohlen, das simulierte Gerät einfach neu zu starten, wenn sich Ihre Netzwerkkonfiguration ändert.
Wenn Sie von diesem Problem betroffen sind, legen Sie unter http://bugreport.apple.com zusätzliche doppelte Radargeräte ab , um die Priorität zu erhöhen.
Wenn Sie dieses Problem sehen, ohne die Netzwerkkonfigurationen geändert zu haben, ist dies kein bekannter Fehler, und Sie sollten auf jeden Fall ein Radar einreichen, um anzuzeigen, dass das Problem nicht der bekannte Fehler ist, der durch die Netzwerkkonfiguration geändert wurde.
quelle
Was das Problem für mich löste, war, den Simulator neu zu starten und Inhalte und Einstellungen zurückzusetzen.
quelle
Außerdem tritt unter iOS 8 Simulator ein Problem mit Beta 5 und AFNetworking 1.3 auf, das zu einem Verbindungsfehler führt:
Der gleiche Code funktioniert gut auf iOS 7- und 7.1-Simulatoren, und mein Debugging-Proxy zeigt, dass der Fehler auftritt, bevor tatsächlich eine Verbindung versucht wird (dh keine Anforderungen protokolliert werden).
Ich habe den Fehler bei NSURLConnection verfolgt und Apple einen Fehler gemeldet. Siehe Zeile 5 im beigefügten Bild:
.
Das Ändern der Verwendung
https
ermöglicht die Verbindung von iOS 8-Simulatoren, wenn auch mit zeitweiligen Fehlern.Das Problem ist in Xcode 6.01 (g) immer noch vorhanden.
quelle
Dieses Problem trat bei der Verwendung von Alamofire auf. Mein Fehler war, dass ich
[:]
aufGET
Anfrage ein leeres Wörterbuch für die Parameter gesendet habe, anstattnil
Parameter zu senden .Hoffe das hilft!
quelle
Das Öffnen von Charles hat das Problem für mich gelöst, was sehr seltsam erscheint ...
quelle
Siehe pjebs Kommentar am 5. Januar auf Github.
Methode 1 :
Einige schlagen außerdem vor, erneut eine Verbindung zur Site herzustellen.
dh ZWEIMAL die POST-Anfrage auslösen
Lösung: Verwenden Sie eine Methode, um eine Verbindung zur Site herzustellen. Geben Sie (id) zurück. Wenn die Netzwerkverbindung unterbrochen wurde, kehren Sie zurück, um dieselbe Methode zu verwenden.
Methode 2
quelle
Ich habe diesen Fehler auch erhalten, aber auf tatsächlichen Geräten und nicht auf dem Simulator. Wir haben den Fehler beim Zugriff auf unser Heroku-Backend über HTTPS (Gunicorn Server) und beim POSTS mit großen Körpern (alles über 64 KB) festgestellt. Wir verwenden HTTP Basic Auth zur Authentifizierung und haben festgestellt, dass der Fehler behoben wurde, indem NICHT die
didReceiveChallenge:
Delegate-Methode für NSURLSession verwendet wurde, sondern die Authentifizierung durch Hinzufügen in den ursprünglichen Anforderungsheader eingebrannt wurdeAuthentiation: Basic <Base64Encoded UserName:Password>
. Dies verhindert, dass das zum Auslösen derdidReceiveChallenge:
Delegatennachricht erforderliche 401 und die nachfolgende Netzwerkverbindung unterbrochen werden.quelle
Ich hatte das gleiche Problem. Lösung war einfach, ich habe festgelegt
HTTPBody
, aber noch nicht festgelegtHTTPMethod
zuPOST
. Nachdem dies behoben war, war alles in Ordnung.quelle
Ich hatte das gleiche Problem. Ich weiß nicht, wie AFNetworking die https-Anforderung implementiert, aber der Grund für mich ist das Cache-Problem der NSURLSession.
Nachdem meine Anwendung von der Safari zurückverfolgt und dann eine http-Anfrage gesendet hat, wird der Fehler "http load load 1005" angezeigt. Wenn ich die Verwendung aufhöre
"[NSURLSession sharedSession]"
, aber eine konfigurierbare NSURLSession-Instanz zum Aufrufen der Methode "dataTaskWithRequest:" wie folgt verwende, ist das Problem behoben.Denken Sie daran zu setzen
config.URLCache = nil;
.quelle
Ich musste XCode beenden, den Inhalt des DerivedData-Ordners löschen (~ / Library / Developer / Xcode / DerivedData oder / Library / Developer / Xcode / DerivedData) und den Simulator beenden, damit dies funktioniert.
quelle
Ich habe dieses Problem auch auf einem iOS 8-Gerät. Es ist etwas mehr detailliert hier und scheint ein Fall von iOS zu versuchen , Verbindungen zu verwenden , die bereits abgelaufen sind out. Mein Problem ist nicht dasselbe wie das in diesem Link erläuterte Keep-Alive-Problem, es scheint jedoch dasselbe Endergebnis zu sein.
Ich habe mein Problem behoben, indem ich einen rekursiven Block ausgeführt habe, wenn ich den Fehler -1005 erhalte. Dadurch wird die Verbindung schließlich durchgestellt, obwohl die Rekursion manchmal mehr als 100 Mal wiederholt werden kann, bevor die Verbindung funktioniert, jedoch nur eine Sekunde zum Ausführen hinzugefügt wird Ich wette, das ist genau die Zeit, die der Debugger benötigt, um die NSLogs für mich zu drucken.
So führe ich einen rekursiven Block mit AFNetworking aus: Fügen Sie diesen Code Ihrer Verbindungsklassendatei hinzu
Dann benutze es so:
Sie werden sehen, dass ich eine
AFHTTPRequestOperation
Unterklasse verwende, aber Ihren eigenen Anforderungscode hinzufüge. Der wichtige Teil ist das Aufrufenrecurse(@offset.intValue+1));
, damit der Block erneut aufgerufen wird.quelle
Wenn das Problem auf einem Gerät auftritt, überprüfen Sie, ob Datenverkehr über einen Proxy geleitet wird (Einstellungen> Wi-Fi> (Info)> HTTP-Proxy). Ich hatte mein Gerät für Charles eingerichtet, vergaß aber den Proxy. Scheint, dass dieser Fehler auftritt, ohne dass Charles ihn tatsächlich ausführt.
quelle
Wenn beim Hochladen von Dateien auf einen Back-End-Server jemand diese Fehlermeldung erhält, stellen Sie sicher, dass der empfangende Server über eine maximale Inhaltsgröße verfügt, die für Ihre Medien zulässig ist. In meinem Fall benötigte NGINX einen höheren Wert
client_max_body_size
. NGINX lehnte die Anforderung ab, bevor das Hochladen durchgeführt wurde, sodass kein Fehlercode zurückkam.quelle
Ich habe den Fehler auf einem iOS 7-Gerät erhalten, als ich Xcode 6.2 Beta verwendet habe.
Das Zurückschalten von Xcode 6.2 Beta auf 6.1.1 hat das Problem behoben, zumindest auf einem iOS 7-Gerät.
quelle
Auf
2017-01-25
Apple wurde ein technisches Q & A zu diesem Fehler veröffentlicht:quelle
Ich habe das Problem monatelang bekommen und schließlich festgestellt, dass beim Deaktivieren von DNSSEC auf unserer API-Domain alles in Ordnung war: simple_smile:
quelle
Ich habe eine Verbindung über ein VPN hergestellt. Durch Deaktivieren des VPN wurde das Problem behoben.
quelle
Ich habe diesen Fehler festgestellt, als ich eine NSURLRequest an eine NSURLSession übergeben habe, ohne die HTTPMethod der Anforderung festzulegen .
Fügen Sie das hinzu
HTTPMethod
, und die Verbindung funktioniert einwandfreiquelle
Testen Sie, ob Sie andere Apps (z. B. Safari) anfordern können. Wenn nicht, ist möglicherweise etwas auf Ihrem Computer. In meinem Fall hatte ich dieses Problem mit Avast Antivirus, das meine Simulatoranforderung blockierte (fragen Sie mich nicht warum).
quelle
Durch einen Neustart des Computers wurde das Problem mit Xcode9.1 behoben. Ich hatte den Simulator und Xcode neu gestartet, es funktioniert nicht.
quelle
Ich hatte das gleiche Problem: Ich habe Network Link Conditioner für langsame Netzwerktests für die App aktiviert. Das hat diesen Fehler manchmal verursacht. Wenn ich ihn deaktiviert habe
Settings > Developer > Network Link Conditioner
, hat er mein Problem gelöst.Hoffe das hilft jemandem.
quelle
In meinem Fall lag es daran, dass ich eine Verbindung zu HTTP herstellte und es auf HTTPS lief
quelle
Ich hatte dieses Problem aus folgendem Grund.
TLDR: Überprüfen Sie, ob Sie eine
GET
Anforderung senden, die die Parameter für die URL anstatt für dieNSURLRequest's HTTBody
Eigenschaft senden soll .==================================================
Ich hatte eine Netzwerkabstraktion in meine App eingebunden und sie funktionierte für alle meine Anfragen ziemlich gut.
Ich habe eine neue Anfrage zu einem anderen Webdienst hinzugefügt (nicht zu meinem eigenen), und dieser Fehler hat mich ausgelöst.
Ich ging zu einem Spielplatz und begann von Grund auf, eine Barebone-Anfrage zu erstellen, und es funktionierte. Also näherte ich mich meiner Abstraktion, bis ich die Ursache fand.
Meine Abstraktionsimplementierung hatte einen Fehler: Ich habe eine Anfrage gesendet, die in der URL codierte Parameter senden sollte, und ich habe die
NSURLRequest's HTTBody
Eigenschaft auch mit den Abfrageparametern gefüllt . Sobald ich das entfernteHTTPBody
, funktionierte es.quelle
Ich habe diesen Fehler erhalten und festgestellt, dass die Anwendung Postman ebenfalls heruntergefallen ist, aber in der App Advanced Rest Client (ARC) und in Android funktioniert hat. Also musste ich Charles installieren, um die Kommunikation zu debuggen, und ich bemerke, dass der Antwortcode -1 war. Das Problem war, dass der REST-Programmierer vergessen hat, den Antwortcode 200 zurückzugeben.
Ich hoffe, dass dies anderen Entwicklern hilft.
quelle
Wenn der Fehler -1005 angezeigt wird, muss die API erneut aufgerufen werden.
Sie müssen Ihren Code hinzufügen, um die Funktion erneut aufzurufen. Stellen Sie sicher, dass Sie einmal eine Aufrufmethode waren, andernfalls eine rekursive Aufrufschleife.
quelle
Neben all den Antworten habe ich eine schöne Lösung gefunden. Tatsächlich ist das Problem im Zusammenhang mit dem Ausfall der Netzwerkverbindung für das iOS 12-Onword darauf zurückzuführen, dass das iOS 12.0-Onword einen Fehler aufweist. Und es noch zu lösen. Ich hatte die Git-Hub-Community wegen eines AFNetworking-Problems durchgesehen, als die App aus dem Hintergrund kam und versuchte, einen Netzwerkanruf zu tätigen, und beim Verbindungsaufbau fehlschlug. Ich verbringe 3 Tage damit und versuche viele Dinge, um die Ursache dafür zu finden und habe nichts gefunden. Endlich habe ich etwas Licht im Dunkeln, als ich diesen Blog rot habe https://github.com/AFNetworking/AFNetworking/issues/4279
Es wird gesagt, dass es einen Fehler in iOS 12 gibt. Grundsätzlich können Sie nicht erwarten, dass ein Netzwerkanruf jemals abgeschlossen wird, wenn die App nicht im Vordergrund steht. Und aufgrund dieses Fehlers werden die Netzwerkanrufe abgebrochen und wir erhalten Netzwerkfehler in Protokollen.
Mein bester Vorschlag an Sie ist, eine gewisse Verzögerung vorzusehen, wenn Ihre App vom Hintergrund in den Vordergrund kommt und ein Netzwerkanruf erfolgt. Führen Sie diesen Netzwerkanruf im Versand asynchron mit einer gewissen Verzögerung durch. Sie werden niemals Netzwerkanrufe oder Verbindungsverlust bekommen.
Warten Sie nicht, bis Apple dieses Problem für iOS 12 lösen lässt, da es noch nicht behoben ist. Sie können diese Problemumgehung durchführen, indem Sie eine Verzögerung für Ihre Netzwerkanforderung angeben, z. B. NSURLConnection, NSURLSession oder AFNetworking oder ALAMOFIRE. Prost :)
quelle
Ich hatte das gleiche Problem, als ich über die iOS 12-App mit einem physischen Gerät auf dem Server meines Unternehmens anrief. Das Problem war, dass die Serverfestplatte voll war. Das Freigeben von Speicherplatz auf dem Server löste das Problem.
Ich habe den gleichen Fehler in einer anderen Situation gefunden, die meiner Meinung nach auf eine Zeitüberschreitung zurückzuführen ist, die nicht über die von Apple (
URLSession.timeoutIntervalForRequest
undURLSession.timeoutIntervalForResource
) bereitgestellte Standard-Netzwerk-API parametrierbar ist . Auch dort .. Server Antwort schneller gemacht löste das Problemquelle