Verwenden von NSProgress mit geschachtelten NSOperationen

8

Ich habe NSProgress untersucht, aber festgestellt, dass die vorhandene Dokumentation, die Klassenreferenz und die Tutorials fehlen. Ich frage mich hauptsächlich, ob meine NSProgress auf meinen Anwendungsfall anwendbar ist. Die Klassenreferenzdokumentation bezieht sich entweder auf suboperations oder subtasks , ich mag mich irren, aber ich interpretiere suboperations als einen Fall, in dem eine NSOperation eine Gruppe anderer NSOperations verwaltet. Ein Beispiel für meinen Anwendungsfall ist wie folgt:

  • Erstellen Sie eine Operation Upload All Items in Group für jede vorhandene Gruppe.
  • Fügen Sie jede dieser Operationen zu einem NSOperationQueue hinzu.
  • Jede Upload All Items in Group -Operation erstellt eine Upload Item -Operation für jedes Element in ihrer Gruppe. Diese werden alle zu einem NSOperationQueue hinzugefügt, das von der Operation verwaltet wird.

Ich hätte erwartet, dass NSProgress dies unterstützt, und erlaube mir, den Fortschritt von den verschachtelten Operationen ( Upload Item operation) auf die übergeordnete Operation und schließlich auf den Haupt-Thread und die UI zu übertragen. Aber ich hatte Schwierigkeiten, dies zu implementieren, es scheint, dass NSProgress eher für lange Operationen gedacht ist, die ihren gesamten Code auf einem Hintergrundthread ausführen, aber separate "Abschnitte" haben, die es einfach machen festzustellen, wann Fortschritte gemacht wurden, Wenn dies der Fall ist, ist die Verwendung des Begriffs suboperation ein bisschen irreführend, da es an die Verwendung verschachtelter NSOperations erinnert.

Vielen Dank für Ihre Hilfe und lassen Sie mich wissen, ob weitere Informationen benötigt werden.

    
Arkcann 04.10.2013, 18:38
quelle

1 Antwort

13

NSProgress weiß nichts über NSOperations - die beiden Dinge sind orthogonal - aber das bedeutet nicht, dass es nicht mit ihnen verwendet werden kann. Die Idee hinter der Verschachtelung von NSProgress "tasks" besteht darin, dass die innere Aufgabe nichts über die äußere Aufgabe weiß und die äußere Aufgabe keinen direkten Zugriff auf die% ce_de% der inneren Aufgabe benötigt, um Updates dafür einzuholen. Ich habe mir ein kleines Beispiel ausgedacht:

%Vor%

Beachten Sie, dass wenn NSProgress verwendet wird, um den Status der Benutzeroberfläche zu übermitteln, Sie sicherstellen möchten, dass Sie jedes Mal, wenn Sie das Objekt NSProgress aktualisieren, dies aus dem Hauptthread tun Sie werden viele seltsame Abstürze bekommen.

Alternativ können Sie einfach NSURLConnection verwenden, um Dateien herunterzuladen, und dann einen Delegierten wie folgt haben:

%Vor%

Ich hoffe, das hilft.

    
ipmcc 06.10.2013, 21:01
quelle