3 Stimmen

Wie man einen asynchronen Prozess in einer NSOperation ausführt

Ich habe eine Notwendigkeit, einige Daten von einem Webservice über einen Hintergrund-Thread in einer App zu aktualisieren, an der ich arbeite.

Normalerweise würde ich dies über eine NSOperationQueue und eine synchrone Web-Anfrage in der main()-Funktion der NSOperation .

Für diesen speziellen Datenabruf benötigt die Anwendung jedoch die Verwendung von OAuth y el OAuthConsumer Bibliothek, die ich verwende, führt die Anforderung an den Webservice über eine asynchrone Anforderung mit Delegate-Methode-Callbacks für Erfolg/Fehlschlag.

Mein Problem ist, dass diese delegieren Rückrufe getan scheinen Prozesse zu erhalten, weil (wie ist mein Verständnis) meine Operation Prozess zerstört/aufgeräumt wird, wenn das Ende der main() Funktion erreicht und der Vorgang wird vom Stapel der Vorgangswarteschlange genommen.

Ist das richtig?

Wenn ja, gibt es eine Lösung, dies über eine NSOperationQueue zu tun, und wenn nicht, was ist die aktuelle beste Praxis für das Abrufen von Daten über einen Hintergrund-Thread in einer asynchronen Weise, die Delegat Rückrufe behandeln kann?

1voto

Joe Punkte 56389

Sie können die Laufschleife fortsetzen, bis Ihre Operationen abgeschlossen sind. Sie starten Ihre asynchronen Operationen und führen die Ablaufschleife so lange aus, bis sie abgeschlossen sind. Das "Complete"-Flag ist eine Instanzvariable, die Sie setzen, wenn alle Ihre asynchronen (OAuth-)Elemente abgeschlossen sind.

complete = NO;
//Start async operations
while (!complete) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

...

-(void)completeCallback
{
    complete = YES;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X