nsurlsessiontask

___ tag123afnetworking2 ___ AFNetworking 2.0 ist eine Netzwerkbibliothek für iOS 6+ und Mac OS X 10.8+. ___ qstntxt ___

Es gibt einige Herausforderungen, denen ich mit der Streaming-Anfrage mit AFNetworking 2.0 gegenüberstehe.

Ich möchte viele Dateien (~ 50MB) auf den Server hochladen und die Anfrage muss STREAMING sein. (Andernfalls stürzt App aufgrund von Speicherdruck ab)

Ich habe verschiedene Möglichkeiten ausprobiert, dies in AFNetworking 2.0 ohne Erfolg zu tun. Das mache ich gerade:

%Vor%

Das funktioniert gut, aber es streamt nicht. Es bereitet die Anforderung im Speicher vor, kann abstürzen, wenn die Anfrage zu groß ist. Ich hatte mit nativen Sockets und Streams experimentiert, aber Apple sagt, dass sie die App deswegen ablehnen könnten.

Ein anderer Ansatz, den ich ausprobiert habe, ist folgender:

%Vor%

Aber das gibt mir Laufzeitfehler, der sagt:

  

Beenden der App aufgrund der nicht abgefangenen Ausnahme "NSGenericException"   Grund: "Upload-Aufgaben in Hintergrundsitzungen müssen aus einer Datei stammen"   *** Erster Aufrufstack: (0 CoreFoundation 0x02cc75e4 __exceptionPreprocess + 180 1 libobjc.A.dylib
  0x02a4a8b6 objc_exception_throw + 44 2 CFNetwork
  0x0459eb6c - [__ NSCFBackgroundSessionBridge   uploadTaskForRequest: uploadFile: bodyData: Vervollständigung:] + 994 3
  CFNetwork 0x045f2f37 - [__ NSCFURLSitzung   uploadTaskWithStreamedRequest:] + 73

(Muss streaming sein und kann in background fortgesetzt werden)

    
___ tag123httpstreaming ___ HTTP-Server-Push (auch bekannt als HTTP-Streaming) ist ein Mechanismus zum Senden von Daten von einem Webserver an einen Webbrowser. ___ qstnhdr ___ Ich brauche viele Dateien hochladen (bis zu 100) zum Server AFNetworking in einer einzigen Streaming-Anfrage verwenden, kann ich Fortschritt laden liefern ___ answer27319249 ___

Ich habe das kürzlich selbst gelöst.

Ich empfehle die Verwendung einer Netzwerkbibliothek wie AFNetworking. Es wird Sie davor bewahren, monotone Aufgaben zu erledigen, die zuvor gelöst wurden.

Um die Anfrage wirklich im Hintergrund zu senden, müssen Sie die gesamte Anfrage in eine Datei schreiben und diese dann mit NSURLSession auf Ihren Server streamen. (Das ist die akzeptierte Antwort - Link unten) Also müssen Sie die Anfrage auf die Festplatte schreiben, ohne ganze Dateien im Speicher zu lesen.

So laden Sie Aufgaben im Hintergrund mit afnetworking

Sie können eine Datei streamen (nicht im Hintergrund) wie:

%Vor%

Ссылка

Hinweis: Eine einfache Lösung besteht darin, Zeit für die Ausführung Ihrer App im Hintergrund anzufordern. Wenn %code% für Ihren App-Delegaten aufgerufen wird, können Sie %code% aufrufen, um nach einer bestimmten Zeit im Hintergrund zu fragen. ( %code% , um zu sagen, dass Sie fertig sind.) Was sind die Nachteile, die Sie stellen? Sie haben eine begrenzte Zeit zur Verfügung. „Wenn Sie nicht endBackgroundTask nennen. Für jede Aufgabe, bevor die Zeit abgelaufen ist, das System die App tötet Wenn Sie einen Block Objekt in dem Handler Parameter liefern, ruft das System Handler, bevor die Zeit, um Ihnen eine Chance verfällt die Aufgabe zu beenden. "

Ссылка :

Fortschritt

Sie können den Fortschritt mehrerer NSProgress-Objekte mithilfe der Child / Parent-Beziehung verfolgen. Sie können ein Objekt %code% erstellen und dann %code% aufrufen, bevor Sie eine neue Anfrage und %code% erstellen. Ihr Objekt overallProgress spiegelt den Fortschritt aller untergeordneten Elemente wider.

    
___ tag123nsursessiontask ___ hilf uns, dieses Wiki zu bearbeiten ___ tag123ios ___ iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die verwandten Tags [objective-c] und [swift] für Probleme, die für diese Programmiersprachen spezifisch sind. ___
1
Antwort

Ich brauche viele Dateien hochladen (bis zu 100) zum Server AFNetworking in einer einzigen Streaming-Anfrage verwenden, kann ich Fortschritt laden liefern

Es gibt einige Herausforderungen, denen ich mit der Streaming-Anfrage mit AFNetworking 2.0 gegenüberstehe. Ich möchte viele Dateien (~ 50MB) auf den Server hochladen und die Anfrage muss STREAMING sein. (Andernfalls stürzt App aufgrund von Sp...
28.02.2014, 10:55