2017-04-12 7 views
0

Ich habe eine Frage zu Alamofire und seinem Verhalten mit einem für Hintergrundaufgaben konfigurierten SessionManager. Ich verwende es, um ein Video im Hintergrund hochzuladen.Verketten von Hintergrundaufgaben Alamofire

Schritt I: Hochladen von Video:
Dieser Teil ist Standard, jedoch, wenn der Upload abgeschlossen ist:

Schritt II: Die Komponenten Upload:
Ich brauche eine DELETE-Anfrage an den Server senden lassen Sie wissen, dass der Video-Upload abgeschlossen ist. Bei Erfolg enthält die Antwort einen Standort-Header für das neu hochgeladene Video.

Schritt III Video-Metadaten hinzufügen:
Mit diesem Ort ich die Video-Metadaten zu PATCH Anfrage benötigen: Titel und Beschreibung.

Also meine Frage ist über das Überschreiben der Session Manager Delegate Closures. Ich kann sessionDidFinishEventsForBackgroundURLSession und taskDidComplete überschreiben und wenn ich mit dem Hintergrund vollständig fertig bin, muss ich das System completionHandler aufrufen, das ich als eine Eigenschaft im SessionManager ablege ... Also wann/wo soll ich die DELETE-Anfrage abfeuern und dann/Wo soll ich die PATCH-Anfrage auslösen?

Sollte ich 3 verschiedene Hintergrundsitzungskonfigurationskennungen erstellen, damit ich sie identifizieren kann und sicherstellen kann, dass ich sie in der richtigen Reihenfolge kette? Denn offensichtlich kann ich nicht sagen, in der Schließung: das erste Mal, dass Sie genannt werden, feuern Sie diese Anfrage, aber das zweite Feuer aus diesem einen? Und welcher Abschluss der 2 ist der richtige, um den gesamten Prozess abzuschließen und das System CompletionHandler zu nennen? Ich bin mir nicht sicher, ob das richtig ist, weil ich mit dem Alamofire Upload-Antwort-Handler nicht synchron sein werde.

Auch ich wundere mich über die Alamofire Antworthandler. Wenn die App die ganze Zeit im Vordergrund stand? Ich würde die Alamofire-Anfragen einfach unter Verwendung der Antworthandler verketten? Aber wenn die App beendet wird und im Hintergrund läuft, werden diese Handler immer noch da sein?

Jeder Einblick hier würde sehr geschätzt werden. Mir ist klar, dass hier eine Menge los ist und Apple Even Rate beschränkt Hintergrundaufgaben, ich frage mich nur, ob das möglich ist und wenn ja, wie es geht?

+0

Machen Sie es lesbarer, indem Sie es in Teile mit Absätzen teilen. –

Antwort

0

Sollte ich drei verschiedene Hintergrundsitzungskonfiguration Identifikatoren, damit ich sie identifizieren können, und sicherstellen, dass ich die Kette sie in der richtigen Reihenfolge ?

Ich denke nicht, einfach mehr Hintergründe Sitzungen benötigen, für die er ersucht die Fertigstellung Block zu identifizieren wurde die nächste Anforderung aufgerufen und an der Kette. Sie können es erreichen mit

  1. Asynchronous NSOperation: Sie Verwendung von Asynchronous NSOperations zu verketten die mehrere Anforderungen machen. Fügen Sie die Abhängigkeit zwischen den Vorgängen hinzu, und lassen Sie die Planung und die Abhängigkeiten von iOS verarbeiten. Bitte beachten Sie: Ich erwähnte Asynchrone NSOperation. NSOperationen sind Synchron von Natur aus.

  2. Versprechen Kit: Wenn Asynchronous NSOperations viel zu kompliziert sind, können Sie immer Versprechen Kit verwenden. Das Promise-Kit kümmert sich um die Ausführung der Anforderung erst, nachdem die spezifische Anforderung abgeschlossen ist und die gesamte Abhängigkeitskette einen Kurzschluss verursacht, wenn einer der oberen Fehler auftritt.

  3. Erstellen Sie einfach eine neue Datenaufgabe im Abschlussblock der Uploadaufgabe, um das Video hochzuladen. Verwenden Sie keine Delay-Muster für Aufgaben, sondern verwenden Sie Completion-Blöcke. Auf diese Weise müssen Sie nicht angeben, für welche Anfrage der Delegierte aufgerufen wurde, da jede Aufgabe ihren eigenen Abschlussblock hat, können Sie sie beim Schreiben des Codes leicht verketten.

wenn die App beendet und wird im Hintergrund werden diese Handler immer noch rund läuft? obwohl

Am nicht 100% sicher, aber soweit ich weiß, wenn Sie die Hintergrundaufgabe (Hintergrund-Sitzung) zu planen, Aufgabe wird weiterhin ausgeführt, auch wenn der App killed.After ist alles, das ist, warum wir verwenden Hintergrundsitzung. Ich glaube also, dass die Completion-Handler ausgeführt werden, selbst wenn Sie die App beenden.