2011-07-15 3 views
3

J'ai besoin de mettre à jour certaines données d'un webservice via un thread d'arrière-plan dans une application sur laquelle je travaille.Comment exécuter un processus asynchrone dans un NSOperation

Normalement, je le ferais simplement via un NSOperationQueue et une requête web synchrone dans la fonction main() du NSOperation.

Cependant, pour ces données spécifiques vont chercher, l'application nécessite l'utilisation de la bibliothèque et OAuthOAuthConsumer J'utilise la demande de effectue webservice via une requête asynchrone avec callbacks méthode déléguée de réussite/échec. Mon problème est que ces rappels de délégué semblent obtenir des processus, car (comme je le comprends) mon processus d'opération est détruit/nettoyé lorsque la fin de la fonction main() est atteinte et l'opération est désactivée de la file d'attente d'opération empiler.

Est-ce exact? Si oui, existe-t-il une solution pour faire cela via une NSOperationQueue et si non, quelle est la meilleure pratique actuelle pour saisir des données via un thread d'arrière-plan d'une manière asynchrone capable de gérer les rappels de délégués?

+2

Cocher cette http://stackoverflow.com/questions/1596160/asynchronous-methods-in-nsoperation – Jhaliya

+0

@Jhaliya si vous laissez cela comme une réponse, je l'accepte volontiers. Merci – cpjolicoeur

Répondre

1

Vous pouvez continuer la boucle d'exécution jusqu'à ce que vos opérations soient terminées. Ce que vous ferez est de commencer les opérations asynchrones et de continuer à exécuter la boucle d'exécution jusqu'à ce qu'elles soient terminées. L'indicateur complet sera une variable d'instance que vous définirez lorsque tous vos éléments asynchrones (OAuth) seront terminés.

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

... 

-(void)completeCallback 
{ 
    complete = YES; 
} 
Questions connexes