5

I [NSURLSessionConfiguration defaultSessionConfiguration] verwenden meine url Sitzung config.NSURLSession mit ungültigen Fortsetzungsdaten

Ich pausiere einen Task, indem ich cancelByProducingResumeData: aufrufen, um einen Lebenslaufdaten zu erzeugen, und es auf dem Datenträger zu speichern. Wenn ich die Aufgabe neu starten möchte, rufe ich downloadTaskWithResumeData: an. Es funktioniert gut, bis ich die App neu starte.

Ich töte die App, nachdem ich eine Aufgabe pausieren. Dann starte ich meine App erneut und rufe downloadTaskWithResumeData an, ich fand, dass die Fortsetzungsdaten ungültig waren.

ich analysieren die Fortsetzungsdaten in NSDictionary und die NSURLSessionResumeInfoLocalPath bekommen, die

ist

"/private/var/mobile/Containers/Data/Application/5DD071C3-9D5E-4D76-9F74-57B6C92445CB/tmp/CFNetworkDownload_IUI6kg.tmp". Ich versuche auf diese Datei zuzugreifen, aber sie ist nicht vorhanden.

Meine Frage ist, wie kann ich eine Download-Aufgabe mit Fortsetzungsdaten fortsetzen, nachdem ich meine App neu starten.

Danke.

+0

Dank @ Mark, gute Frage - upvoted. Können Sie mir sagen, wie Sie Daten auf die Festplatte schreiben, wenn der Benutzer die App beendet? – NSPratik

Antwort

1

Jedes Mal, wenn Sie Ihre App neu starten, wird alles unter tmp gereinigt werden, ich hatte die gleiche Sache, obwohl ich versucht, alle * .tmp kopieren, und fügen Sie zurück, wenn App neu startet, wird es einen Fehler

werfen

Mein Rat ist, dass Sie prüfen, ob die .tmp-Datei zugänglich ist, von Anfang redownload wenn nicht

+0

@LittleBobyTables, vielen Dank für die Bearbeitung meiner Antworten, um viel netter zu sein. Mark, ich endende mit [ASIHTTPRequest] (https://github.com/pokeb/asi-http-request) zu erreichen, was Sie und ich beide im Sinn –

+0

Vielen Dank für Ihren Rat. Kann ich die resumeData neu erstellen und den * .tmp Dateipfad ersetzen? – Mark

1

ich auf dieses Problem gestoßen. Ich habe festgestellt, dass sich der Sandbox-Pfad nach dem Neustart der Anwendung in iOS8 ändert. Aber die resumeData zeichnet den alten Sandbox-Pfad auf, der es dem Download-Task ermöglicht, die resumeData nicht zu finden. So aktualisiere ich die Sandbox-Pfad durch Schlüssel in Sandbox aufgezeichnet ‚NSURLSessionResumeInfoLocalPath‘, es funktioniert:

NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:resumeDataPath]; 
NSString *resumeDataFileName = [dic[@"NSURLSessionResumeInfoLocalPath"] lastPathComponent]; 
NSString *newTempPath = NSTemporaryDirectory(); 
NSString *newResumeDataPath = [newTempPath stringByAppendingPathComponent:resumeDataFileName]; 
[dic setValue:newResumeDataPath forKey:@"NSURLSessionResumeInfoLocalPath"]; 
[dic writeToFile:resumeDataPath atomically:YES];