1

Die Funktion downloadTaskWithURL gibt manchmal einen Nicht-Null-Speicherort für eine Datei zurück, die nicht existiert.Swift: DownloadTaskWithURL "gelingt" manchmal mit einem Nicht-Null-Speicherort, obwohl die Datei nicht existiert

Es gibt keine Datei unter http://192.168.0.102:3000/p/1461224691.mp4 in der Testumgebung.

Der meiste Zeit, in der erwarteten Fehlermeldung downloadTaskWithURL auf diese URL Ergebnisse Aufruf:

Error downloading message during network operation. Download URL: http://192.168.0.102:3000/p/1461224691.mp4 . Location: nil. Error: Optional(Error Domain=NSURLErrorDomain Code=-1100 "The requested URL was not found on this server." UserInfo=0x17547b640 {NSErrorFailingURLKey= http://192.168.0.102:3000/p/1461224691.mp4 , NSLocalizedDescription=The requested URL was not found on this server., NSErrorFailingURLStringKey= http://192.168.0.102:3000/p/1461224691.mp4 })

Gelegentlich und in einer nicht-deterministischen Art und Weise, downloadTaskWithURL glaubt, dass die Datei vorhanden ist und schreibt etwas in die location Variable . Daher schlägt die Schutzbedingung nicht fehl und der Code wird weiterhin ausgeführt ... was nicht der Fall sein sollte.

Die permanente Datei, die von fileManager.moveItemAtURL(location!, toURL: fileURL) erstellt wird, ist nur 1 Byte und bestätigt, dass die Netzwerkdatei nie an erster Stelle existierte.

Warum verhält sich downloadTaskWithURL so?

Antwort

1

Zur Klarstellung, der Server gibt eine 404 zurück, aber die Download-Aufgabe gibt eine im Grunde leere Datei zurück? Und Sie sind sicher, dass der Server tatsächlich einen Fehlercode (durch Überprüfung der Serverprotokolle) zurückgegeben hat?

In jedem Fall würde ich vorschlagen, den Statuscode im Antwortobjekt zu überprüfen. Wenn es keine 200 ist, hat der Download-Task wahrscheinlich nur den Antworttext einer Fehlerseite heruntergeladen. Oder, wenn der Statuscode 0 ist, ist die Verbindung abgelaufen. Wie auch immer, behandeln Sie es als einen Fehler.

Sie können auch versuchen, dies zu erzwingen, dass alle in einem einzigen Thread passieren und sehen, ob der Nichteterminismus verschwindet.

+0

danke, gute Ideen. werde sie ausprobieren und die Ergebnisse melden! – Crashalot

Verwandte Themen