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 ___
4
Antworten

NSURLSession und Stream-Upload im Hintergrund

Ich habe Probleme mit NSURLSession , um Fotos von der Asset-Bibliothek auf den Server hochzuladen. Zunächst unterstützt NSURLSession keinen Streaming-Upload. Ich habe eine Ausnahme, wenn ich versuche, das zu benutzen: %Vor% Dies ist...
14.11.2013, 10:02
2
Antworten

POST-Anforderung in Swift 3-dev-Snapshot gibt "mehrdeutigen Verweis auf member 'dataTask (mit: completionHandler :)"

Ich versuche eine POST-Anfrage im Swift 3-Entwicklungsschnappschuss zu machen, aber aus irgendeinem Grund schlägt der Aufruf von NSURLSession.dataTask mit dem Fehler im Titel fehl. Hier ist der Code, den ich verwende: %Vor% Der Fehler ist...
30.05.2016, 15:17
2
Antworten

NSURLSession mit Token-Authentifizierung

Ich habe den folgenden Code in meinem iOS -Projekt und möchte konvertieren, um NSURLSession anstelle von NSURLConnection zu verwenden. Ich frage ein REST API , das ein Token-basiertes HTTP Authentication -Schema verwendet, aber ich...
04.01.2014, 11:21
3
Antworten

NSURLSessionDownloadTask - Downloads, endet aber mit Fehler

Ich versuche eine PDF-Datei herunterzuladen. Früher, als ich den Completion-Handler-Block verwendet habe, konnte ich die Datei in der tmp-Position sehen. Ich wollte dann den Download-Fortschritt zeigen, also habe ich die Delegate-Methoden implem...
09.03.2014, 04:29
3
Antworten

Sollten wir in Erwägung ziehen, von AFNetworking zu NSUrlSession überzugehen? [geschlossen]

Ich habe AFNetworking für eine Weile benutzt, jedoch kürzlich gehört Meinung NSUrlSession bietet die gleiche Funktionalität wie AFNetworking , also keine Notwendigkeit, AFNetworking zu verwenden. Meistens interessiere ich mich für die...
02.12.2014, 13:57
2
Antworten

Finde den Download-Fortschritt einer Datei in swift

Ich habe gesucht, aber nur in Ziel C keine relevante Antwort gefunden. Gibt es eine Möglichkeit, den Fortschritt des Herunterladens einer Datei in Swift zu finden, so dass sie dem Benutzer angezeigt wird? Ich bin neu in iOS Programmierung und ha...
13.01.2015, 13:30
1
Antwort

Hochladen von Image NSData über POST und NSURLSession

Ich versuche, ein einzelnes UIImage auf einen Server hochzuladen, und alles scheint in Ordnung zu sein, außer dass das Bild nie hochgeladen wird. Dies ist der Code, mit dem ich das Bild in iOS hochlade: %Vor% Der Server antwortet mit eine...
27.05.2014, 00:55
2
Antworten

iOS und Go - Keep-Alive mit NSURLSession

In meiner iOS-App habe ich eine Suchfunktion, die Ergebnisse von einem Server abruft. Die Suche wird live aktualisiert, wenn der Benutzer seine Abfrage aktualisiert. Dies führt dazu, dass mehrere Anfragen nacheinander gestellt werden. Meine F...
07.05.2015, 04:02
5
Antworten

Swift 3 und NSURLSession Problem

Dank Apple ist mein iOS 9 Projekt 'Swift 2.3' mit iOS 'Swift 3' vollkommen unbrauchbar ... Ich habe fast alles repariert, außer dass ich Probleme mit NSURLSession habe, Xcode sagt mir, dass es in URLSession umbenannt wurde, wenn ich es...
14.06.2016, 15:27
1
Antwort

Meine NSURLSessionDelegate-Methoden werden während eines Hintergrunddownloads nicht aufgerufen

Ich versuche einen Download mit NSURLSession einzurichten, der im Hintergrund weiterläuft. Ich habe eine Singleton-Klasse namens DownloadManager , die die NSURLSession erstellt und eine Download-Aufgabe wie folgt startet: %Vor% Ich h...
27.03.2014, 20:07