NSOperation und NSOperationQueue Callback

7

Ich habe eine Klasse. Innerhalb dieser Klasse gebe ich eine NSOperation in die NSOperationQueue, die in meinen globalen Variablen lebt.

Jetzt ist meine NSOperation beendet. Ich möchte nur wissen, dass es in meiner Klasse fertig ist und dass die Operation Daten an diese Klasse weitergibt. Wie wird das normalerweise gemacht?

    
Mel 30.12.2009, 05:56
quelle

3 Antworten

21

Ich benutze das Delegiertenmuster - das war der Ansatz, den mir die Jungs auf einer Apple Developer Conference empfohlen haben.

Das Gerüst:

  1. Richten Sie ein Protokoll MyOperationDelegate mit einer setResult:(MyResultObject *) result -Methode ein.
  2. Wer dieses Ergebnis benötigt, implementiert dieses Protokoll.
  3. Fügen Sie @property id<MyOperationDelegate> delegate; zur von Ihnen erstellten NSOperation-Unterklasse hinzu.

Die Arbeit:

  1. Wenn Sie Ihre Operation erstellen, aber bevor Sie sie in die Warteschlange stellen, teilen Sie ihr mit, wer das Ergebnis erhalten soll. Oft ist dies das Objekt, das die Operation erstellt: [myOperation setDelegate: self];
  2. Rufen Sie am Ende der Hauptfunktion Ihrer Operation [delegate setResult: myResultObject]; auf, um das Ergebnis weiterzugeben.
Kris Jenkins 30.12.2009, 12:36
quelle
14

Fügen Sie Ihrer Klasse einen Beobachter hinzu, der nach Änderungen am isFinished-Wert der NSOperation-Unterklasse

lauscht %Vor%

Implementieren Sie dann die folgende Methode, indem Sie nach dem Kontext suchen, den Sie als Listener registriert haben. Sie können die Daten, die Sie aus der NSOperation-Unterklasse abrufen möchten, über eine Zugriffsmethode / -eigenschaft bereitstellen.

%Vor%

Überprüfen Sie die KVO-Programmierung Guide und die Concurrency Programming Guide für weitere Informationen.

Beachten Sie außerdem, dass der Beobachter im selben Thread wie die Operation empfangen wird. Daher müssen Sie möglicherweise Code im Hauptthread ausführen, wenn Sie mit der Benutzeroberfläche arbeiten möchten.

    
Jablair 30.12.2009 06:05
quelle
14

Eine weitere Alternative ... Wenn Sie nach Abschluss der Operation etwas arbeiten müssen, können Sie diese Arbeit in einem Block zusammenfassen und eine Abhängigkeit verwenden. Dies ist besonders bei NSBlockOperation sehr einfach.

%Vor%

Sie können auch setCompletionBlock %Vor%     

Robert 23.10.2012 10:11
quelle