2013-11-14 5 views
5

Was ist der beste Ansatz, um die Hintergrundübertragung zu verwenden, um Assets aus der Galerie hochzuladen?NSURLSession: Hochladen von Assets mit Hintergrundübertragung

Scheint, wie uploadTaskWithRequest:fromData: nicht mit NSURLSession mit backgroundSessionConfiguration erstellt funktioniert, da es eine Ausnahme verursacht: „app beenden aufgrund nicht abgefangene Ausnahme‚NSGenericException‘Grund:‚Laden Sie Aufgaben im Hintergrund Sitzungen aus einer Datei sein muss“. Aus der Beschreibung der Ausnahme zu folgern, sollte die Hintergrundübertragung nicht auch mit gestreamten Upload-Aufgaben funktionieren.

Fair genug. uploadTaskWithRequest:fromFile: ist die erste Sache, die einem in den Sinn kommt, wenn Sie über das Hochladen von Daten nachdenken, die Sie bereits auf der Festplatte haben. Aber die NSURLSession-Klassenreferenz sagt uns, dass diese Methode nur mit Datei-URLs funktioniert, aber wenn Sie den URL-Pfad von Asset abrufen, beginnt dieser mit "assets-library: // asset/..." und vorausgesetzt, dieser Pfad funktioniert auch nicht.

Es scheint also, dass die einzige Option übrig ist, Datei aus der Asset-Bibliothek in ein temporäres Verzeichnis zu kopieren und die Datei-URL uploadTaskWithRequest:fromFile: bereitzustellen. Aber es macht keinen Sinn, da Sie bereits Asset-Dateien auf Ihrer Festplatte gespeichert haben. Fehle ich etwas?

Update:

Talked mit Apple-Ingenieur bei Tech Talks Veranstaltung und er bestätigt, dass Hintergrund NSURLSession nur Urls Datei unterstützt. In der Tat müssen Sie die Asset-Bibliothek in ein temporäres Verzeichnis kopieren und die Datei-URL uploadTaskWithRequest:fromFile: angeben, um sie mit Hintergrund NSURLSession hochzuladen. Dieses Verhalten kann sich jedoch in Zukunft ändern.

Antwort

2

Sie sagen auch irgendwo in der Dokumentation, dass Upload/Download URLs nur Datei http https Schemata unterstützen. Hintergrund unterstützt nur http/https.
Ich glaube, dass URLs der Kerndaten und -anlagenbibliotheken, obwohl sie technisch gültige URLs sind, keine echten URLs sind und höchstwahrscheinlich nicht durch das Erstellen benutzerdefinierter NSurl-Protokolle implementiert werden.

Ich bin also geneigt zu glauben, dass Sie das Asset in eine Datei schreiben und eine URL an diese Datei übergeben sollten, um die Aufgabe hochzuladen. Ich arbeite an einem Projekt, das Assets hochlädt, und ich habe gerade damit begonnen, es in eine Hintergrundsitzung umzuwandeln. Also werde ich das später selbst ausprobieren, um die Theorie zu beweisen.

+0

Nun, ja. Datei kopieren ist im Grunde das was ich gerade mache. Wie geht es dir mit der Nursession? –

+0

Ihre Vermutung schien richtig zu sein. –

+0

@RobertGeifman Also im Prinzip uploadTaskWithRequest: fromData: funktioniert nicht? – marciokoko