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:
Upload All Items in Group
für jede vorhandene Gruppe. NSOperationQueue
hinzu. 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.
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:
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.
Tags und Links objective-c multithreading nsoperation nsoperationqueue nsprogress