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

Zurückgeben von NSData aus dem NSURLSessionDataTask-Beendigungshandler

Ich versuche eine einfache Klasse zu erstellen, mit der ich einen Post-Web-Service aufrufen kann. Alles funktioniert perfekt, außer dass ich NSData nicht zurückgeben kann. Das ist mein Code: %Vor% Bitte beachten Sie, dass ich //ret...
20.07.2014, 15:05
4
Antworten

Rekursive / Iterative NSURLSessionDataTask verursacht Speicherverlust

Ich habe ein Problem mit Speicherverlust in meinem Code, ich muss viele URLs in schneller Folge abholen, jedes GET wird durch das Ergebnis des vorherigen GET beeinflusst. Der Zweck besteht darin, nach einem bestimmten Inhalt in der Antwort zu su...
08.09.2014, 10:08
2
Antworten

NSURLSession Delegieren-Warteschlange

Das scheint seltsam. Ich scheine nicht scheint, eine NSURLSession delegateQueue bei der Erstellung erfolgreich zu setzen. %Vor% Dies ergibt die folgende Ausgabe. %Vor% Es sieht so aus, als ob mein delegateQueue ignoriert wird. Ich hab...
29.09.2013, 04:43
1
Antwort

Pause, Fortsetzen, Upload-Task mit NSURLSession UploadTask abbrechen

Ich entwickle eine App, um mehrere Dateien mit NSURLSession hochzuladen, jetzt werden meine Dateien erfolgreich hochgeladen. Aber jetzt möchte ich die Uploads pausieren, fortsetzen und abbrechen, genau wie bei Download-Aufgaben. Ist es möglich.?...
07.01.2015, 06:40
4
Antworten

NSURLSession: Hintergrund-Upload und dann eine Service-API aufrufen

Ich habe versucht, die neue ios7 background transfer api zu verwenden, um einige Fotos auf einen Server hochzuladen. Was ist jetzt passiert? 1) wir laden die Bytes nach s3 hoch 2) Rufen Sie eine Service-API auf, um den Upload zu vervollständigen...
17.10.2013, 05:59
4
Antworten

NSMutableURLRequest setTimeoutInterval funktioniert nicht in ios 11.0

Ich verwende eine URL-Hintergrundsitzung für das Hochladen von PDF als Datenstrom, indem ich die ios-Version & gt; 9.0. Ich setze Timeout-Intervall von 300 Sekunden. Es funktioniert überhaupt nicht. Nach 10 Sekunden wird ein Timeout-Fehler angez...
23.11.2017, 08:00
1
Antwort

NSURLRequest hat beim Weiterleiten der Anforderung den HTTP-Header "Authorization" verloren

Wir haben ein Problem beim Herunterladen von Dateien vom Server im Hintergrundmodus. Das Feld "Autorisierung" des HTTP-Headers geht verloren, während die Anfrage an einen anderen Server weitergeleitet wird. Wir haben einige Experimente gemach...
30.04.2014, 12:28
1
Antwort

Zeitüberschreitung bei Code = -1001_kCFStreamErrorCodeKey = -2102

Manchmal wird die Netzwerkanfrage von meiner App blockiert. Und ich bekomme nach einer Weile folgenden Fehler,    ist mit Fehler fehlgeschlagen: Fehler Domain = NSURLErrorDomain Code = -1001 "Zeitüberschreitung der Anforderung." UserInfo = {N...
08.10.2015, 16:05
0
Antworten

Durch den Aufruf von AFHTTPSessionManager.downloadTasks in AFNetworking 2 wird der Haupt-Thread angehalten

Ich habe eine Singleton-Klasse, die einen AFTHTPSessionManager * fileTransferSessionManager enthält. Darin möchte ich manchmal alle Downloads abbrechen, bevor ich sie neu starte, indem ich die DownloadTasks durchlaufe und sie abbringe. Das Probl...
24.03.2014, 15:30
4
Antworten

Wie bekomme ich Daten von Blöcken mit NSURLSession?

Ich habe ein Problem mit diesem Block. Ich versuche, die Daten in den Block von NSURLSession zu bekommen. hier ist mein Code %Vor% Ist es möglich, die Daten innerhalb der Blöcke von NSURLSession zu bekommen?     
03.10.2014, 07:12