Lets sagen, ich habe eine komplexe Berechnung im NSOperation Block ausgeführt. Ich habe es unterbrochen. Habe die App geschlossen. Dann die App neu gestartet. Kann ich den letzten Zustand wiederherstellen und von dort weitermachen? Gibt es eine bestehende Lösung für ein solches Problem oder kann es nur für bestimmte Zwecke maßgeschneidert werden?Speichern der angehaltenen NSOperationQueue in Datei
Antwort
Die Frage ist ein bisschen vage, also ist es schwer zu sagen, ohne den ganzen Code im Spiel zu kennen. Mit diesem gesagt, kann ich das Problem näher bringen durch:
Option 1. Fügen Sie in Ihrer Unterklasse von NSOperation Ihre eigene atomare KVO-Eigenschaft "isPaused" hinzu. Beobachten Sie diese Eigenschaft in der Operation selbst und behandeln Sie sie entsprechend, wenn sie sich jemals ändert.
Option 2. Halten Sie die Operation Queue selbst an? Wenn dies der Fall ist, bedenken Sie, dass diese Eigenschaft innerhalb Ihrer Operationen beobachtet werden kann und dass jeder unabhängig Maßnahmen ergreifen kann, wenn sich dieser Wert ändert.
Option 3. Alle Vorgänge in der Warteschlange abbrechen. Wenn die Ansicht erneut angezeigt wird, starten Sie sie einfach mit neuen Vorgängen neu.
Insgesamt gibt es jedoch kein Patentrezept für bereits laufende Pausierungsvorgänge. Sie müssen Ihre eigene Lösung backen. Der Schaden sollte jedoch nicht so schlimm sein.
Aussetzen und Fortsetzen von Warteschlangen Wenn Sie die Ausführung von Vorgängen vorübergehend anhalten möchten, können Sie die entsprechende Vorgangswarteschlange mit der Methode setSuspended: anhalten.
Das Unterbrechen einer Warteschlange führt nicht bereits dazu, dass die Ausführung von Operationen mitten in ihren Aufgaben angehalten wird. Es verhindert einfach, dass neue Operationen zur Ausführung geplant werden. Sie können eine Warteschlange als Reaktion auf eine Benutzeranforderung anhalten, um laufende Arbeiten anzuhalten, da erwartet wird, dass der Benutzer diese Arbeit eventuell fortsetzen möchte.
Für weitere Details siehe diesen Link Apple Dokument: http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html