2017-01-25 1 views
0

Hallo allerseits, es ist mein erster Ausdruck auf dem Stack :). Ich habe viele Themen durchsucht und keine Antwort gefunden. Ok, hier ist mein Problem:Wie man das Herunterladen von Daten wiederaufnimmt, während die Hintergrundsitzung ungültig gemacht wurde

In meiner App verwende ich NSURLSession - mit Hintergrund-Download. Als ich cancelByProducingResumeData verwenden, alles geht gut, sparte ich resumeData in meinem Sandbox-Verzeichnis und nahm es leicht mit

[session downloadTaskWithResumeData: resumeData]; 

Was wichtig ist, ich nicht Session-Objekt ungültig war. Nach dem App Relaunch Ich erstelle neue Sitzung und versuchen, mit downloadTaskWithResumeData gleichen Methode Download wieder aufnehmen:, zu erhalten Nachricht:

Ungültige Fortsetzungsdaten für Hintergrund herunterladen. Hintergrund-Downloads müssen http oder https verwenden und müssen in eine zugängliche Datei heruntergeladen werden.

Irgendwelche Ideen? :)

+0

Ich nehme an, Sie verwenden eine Hintergrundsitzung, richtig? Und ich gehe davon aus, dass Sie denselben Bezeichner verwenden, damit Sie dieselbe Sitzung erneut erstellen, anstatt eine neue Sitzung mit einer neuen ID zu erstellen, oder? – dgatwood

Antwort

0

Ich benutze Hintergrundsitzung und gleiche ID. Ich schaffe es schon, das Problem zu lösen. Nun, ich hatte Probleme mit dem Simulator, das ist eine ziemlich wichtige Information. Ich speichere meine resumeData im Bibliotheksverzeichnis, und nach dem Lesen zur Laufzeit scheint es, dass NSURLSessionResumeInfoLocalPath Schlüssel verweist auf Verzeichnis, das nicht existiert. Hier ist meine Lösung:

NSMutableDictionary *resumeDictionary = [NSPropertyListSerialization propertyListWithData:invalidResumeData options: NSPropertyListMutableContainersAndLeaves format:NULL error:&error]; 
if (!resumeDictionary || error) return nil; 


NSString *localTmpFilePath = [resumeDictionary objectForKey:@"NSURLSessionResumeInfoLocalPath"]; 
if ([localTmpFilePath length] < 1) return nil; 


NSString *localName = [localTmpFilePath lastPathComponent]; 
NSString *tempPath = NSTemporaryDirectory(); 

NSString *tempFile = [tempPath stringByAppendingString: [NSString stringWithFormat: @"%@", localName]]; 
[resumeDictionary setValue: tempFile forKey: @"NSURLSessionResumeInfoLocalPath"]; 

NSString *libDirectory = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0]; 
libDirectory = [libDirectory stringByAppendingString: [NSString stringWithFormat: @"/%@/%@.tmp", kPathToResumeData, self.guid]]; 

NSData *newResumeData = [NSPropertyListSerialization dataWithPropertyList: resumeDictionary 
                    format: NSPropertyListBinaryFormat_v1_0 
                    options: 0 
                    error: &error]; 
Verwandte Themen