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!
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%