NSURLSessionDownloadTask - Downloads, endet aber mit Fehler

8

Ich versuche eine PDF-Datei herunterzuladen. Früher, als ich den Completion-Handler-Block verwendet habe, konnte ich die Datei in der tmp-Position sehen. Ich wollte dann den Download-Fortschritt zeigen, also habe ich die Delegate-Methoden implementiert. Aber ich kann jetzt sehen, dass die Fortschrittsanzeige funktioniert und die Datei heruntergeladen wird. aber sobald der Download abgeschlossen ist (Bytes geschrieben / Gesamtbytes = 1), wird der Fehlerdelegat aufgerufen und es gibt keine Datei in der tmp-Position. Was vermisse ich ? Unten ist mein Code. Ich habe das Projekt unter Ссылка

hochgeladen %Vor%     
Tamil 09.03.2014, 04:29
quelle

3 Antworten

10

@Rob danke für deine prompten Antworten und das hat mir sehr geholfen. Hier ist mein Code, der funktioniert hat. Hoffe es hilft jemandem. Ich bin in der Lage, den tatsächlichen Dateinamen zu erhalten und die Datei unter Verwendung des ursprünglichen Namens in mein Dokumentenverzeichnis zu verschieben.

%Vor%     
Tamil 09.03.2014, 12:30
quelle
6

In didFinishDownloadingToURL sollten Sie die Datei von location an einen dauerhafteren Ort (z. B. Ihren Dokumentenordner) verschieben. Wenn Sie später im temporären Speicherort nach dieser Datei suchen, bin ich nicht überrascht, dass sie nicht mehr da ist.

Als Die Dokumentation sagt, das location ist als solches definiert:

  

Eine Datei-URL für die temporäre Datei. Da es sich um eine temporäre Datei handelt, müssen Sie entweder die Datei zum Lesen öffnen oder sie an einen permanenten Speicherort im Sandbox-Containerverzeichnis Ihrer App verschieben, bevor Sie von dieser Delegate-Methode zurückkehren.

Sie müssen die Datei an ihre neue Position verschieben bevor von didFinishDownloadingToURL zurückkehrt.

    
Rob 09.03.2014 04:56
quelle
3

Nur für den Fall, dass jemand das gleiche Problem hatte wie ich, dachte ich, ich würde hier meine Lösung posten.

Mein Problem war, dass die Prädikat-Methoden auf einen Hintergrund-Thread feuern, so dass ich zu meinem "Datei-io" -Thread überging, der jedes Schreiben in Dateien behandelt, usw. in der App löscht.

Das Problem dabei ist, dass die temporäre Datei gelöscht wird, sobald die Delegate-Methode endet, die genau in dem Moment stattfand, als ich die Threads wechselte. Als ich dann versuchte, auf die Datei in meinem Datei-io-Thread zuzugreifen, wurde sie bereits gelöscht.

Meine Lösung bestand darin, die Datei in der Delegate-Methode in NSData zu analysieren und dann die NSData zu verwenden, um in das Dateisystem in meinem Datei-io-Thread zu schreiben.

    
Nick Kirsten 23.06.2015 10:36
quelle

Tags und Links