nsurlsession

___ 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. ___ tag123asynchronous ___ Asynchrones Programmieren ist eine Strategie zum Verzögern von Operationen mit hoher Latenz oder niedriger Priorität, üblicherweise um die Leistung, Reaktionsfähigkeit und / oder die Kompostierbarkeit von Software zu verbessern. Solche Strategien werden normalerweise unter Verwendung einer Kombination von ereignisgesteuerter Programmierung und Rückrufen verwendet und verwenden optional die Nebenläufigkeit durch Koroutinen und / oder Threads. ___ tag123nsurssession ___ NSURLSession ist die API für HTTP-Verbindungen, die in iOS 7 und OS X 10.9 eingeführt wurde. ___ qstntxt ___

bearbeiten: Ich muss eine Datei asynchron von einem iPhone in einen serverseitigen Python-Prozess hochladen. Ich möchte die Anfrage asynchron ausführen, damit ich eine ausgelastete Animation anzeigen kann, während sie arbeitet.

Die Anfrage muss den Benutzernamen, das Passwort und die Datei als 'multipart / form-data' enthalten.

Ich kann es synchron mit NSURLConnection mit dem Code wie folgt aussehen:

%Vor%

// Bauanfrage

%Vor%

Wenn ich dies jedoch asynchron mit NSURLSession versuche, scheint es nicht richtig zu funktionieren. Der Code mit NSURLSession sieht folgendermaßen aus:

%Vor%

Ich habe Mühe, zu sehen, was ich anders mache, obwohl es scheint, dass es funktionieren sollte.

Verwendet NSURLSession den richtigen Weg für asynchrone Anfragen? und ich bin neu in NSURLSession, also muss ich meine NSURLMutableRequest für NSURLSession-Anfragen statt NSURLConnection ändern?

Vielen Dank im Voraus für jede Hilfe!

    
___ answer20896632 ___

Sie haben Recht, wenn Sie Ihre Anfrage nur asynchron machen möchten, sollten Sie %code% zurückziehen. Während wir einmal %code% empfohlen hätten, effektiv iOS 9, ist %code% formal veraltet und man sollte %code% bevorzugen.

Sobald Sie %code% verwenden, werden Sie möglicherweise dazu verleitet. Zum Beispiel kann man %code% verwenden und dann den Fortschritt hochladen, selbst nachdem die App in den Hintergrund getreten ist. (Sie müssen ein paar Delegate Methoden schreiben, aus Gründen der Einfachheit bin ich mit einem einfachen Vordergrund-Upload unten geblieben.) Es ist nur eine Frage Ihrer Geschäftsanforderungen, die die neuen %code% Funktionen gegenüber der iOS 7+ Einschränkung ausgleichen mit sich bringt.

Übrigens ist jede Konversation über Netzwerkanfragen in iOS / MacOS wahrscheinlich unvollständig, ohne einen Verweis auf AFNetworking . Es vereinfacht die Erstellung dieser mehrteiligen Anfragen erheblich und verdient definitiv eine Untersuchung. Sie haben auch %code% support (aber ich habe ihre Session-Wrapper nicht benutzt, kann also nicht damit sprechen). Aber AFNetworking ist zweifellos Ihre Aufmerksamkeit wert. Sie können einige der Vorteile der Delegate-Base-API genießen (z. B. Fortschrittsaktualisierungen, abbrechbare Anfragen, Abhängigkeiten zwischen Vorgängen usw.) und weitaus bessere Kontrolle bieten, als mit Komfortmethoden (wie %code% ), ohne jedoch durchzuziehen die Unkräuter der Delegiertenmethoden selbst.

Unabhängig davon, ob Sie wirklich daran interessiert sind, Uploads mit %code% durchzuführen, siehe unten.

Wenn Sie über %code% hochladen möchten, ist es eine leichte Verschiebung des Denkens, nämlich die Konfiguration der Anfrage (und ihrer Header) in der %code% von der Erstellung des Hauptteils der Anfrage ( was Sie jetzt bei der Instantiierung von %code% angeben). Der Hauptteil der Anfrage, die Sie nun als Teil der Upload-Aufgabe angeben, kann entweder ein %code% , eine Datei oder ein Stream sein (ich verwende unten eine %code% , weil wir eine mehrteilige Anfrage erstellen):

%Vor%

Und die Erstellung der %code% , die gesendet wird, ähnelt Ihrem bestehenden Code:

%Vor%

Sie haben die Grenze und den Mime-Typ fest codiert, was gut ist, aber das obige geschieht mit den folgenden Methoden:

%Vor%     
___ tag123nsurlconnection ___ Eine NSURLConnection ist die Apple Foundation Framework-Klasse, die das Laden einer URL-Anforderung unterstützt. Es ist veraltet und sollte durch NSURLSession ersetzt werden. ___ qstnhdr ___ asynchrones Hochladen mit NSURLSession funktioniert nicht, aber synchrone NSURLConnection funktioniert ___
1
Antwort

asynchrones Hochladen mit NSURLSession funktioniert nicht, aber synchrone NSURLConnection funktioniert

bearbeiten: Ich muss eine Datei asynchron von einem iPhone in einen serverseitigen Python-Prozess hochladen. Ich möchte die Anfrage asynchron ausführen, damit ich eine ausgelastete Animation anzeigen kann, während sie arbeitet. Die Anfrage mu...
02.01.2014, 22:32