0

J'écris une bibliothèque simple en utilisant ASIHTTPRequest où j'obtiens URL d'une manière asynchrone. Mon problème est que la fonction main que j'ai a écrite pour tester mes sorties lib avant que les appels asynchrones soient terminés.Test des téléchargements Async avec ASIHTTPRequest

Je suis très nouveau pour le développement Obj C et iPhone, quelqu'un peut-il suggérer un bon moyen d'attendre avant que toutes les demandes soient terminées dans la principale fonction ?

Actuellement, ma fonction main ressemble à ceci -

int main(int argc, char *argv[]) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    IBGApp *ibgapp = [[IBGApp alloc] init]; 
    IBGLib *ibgl = [[IBGLib alloc] initWithUsername:@"joe" andPassword:@"xxx"]; 

    // The two method calls below download URLs async. 
    [ibgl downloadURL:@"http://yahoo.com/" withRequestDelegate:ibgapp andRequestSelector:@selector(logData:)]; 
    [ibgl downloadURL:@"http://google.com/" withRequestDelegate:ibgapp andRequestSelector:@selector(logData:)]; 

    [pool release]; 
    return 0; // I reach here before the async calls are done. 
} 

Alors, quelle est la meilleure façon d'attendre jusqu'à ce que les appels se font async? J'ai essayé de mettre le sommeil, mais évidemment ne fonctionne pas.

Répondre

1

La solution simple et sale est d'ajouter une boucle avant [libération piscine]; ligne. Sth. comme ceci:

while(1){ 
    if ([ibgl requests_finished]){ 
     break; 
    } 
} 

Bien sûr, vous devrez ajouter booléenne requests_finished à la classe IBGLib et la rendre vraie (YES) lorsque les téléchargements sont terminés. N'oubliez pas de gérer l'échec de la requête :).

2

Vous pouvez également demander à l'objet ASIHTTPRequest d'effectuer ces requêtes de manière synchrone.

[request startSynchronous]; 
+0

Et c'est la meilleure idée :). – Jacek

Questions connexes