Attendre jusqu'à ce que de multiples réseaux demandes ont toutes exécutées - y compris l'achèvement des blocs

J'ai de multiples opérations (ils sont AFNetworking demandes) avec l'achèvement des blocs qui prend un certain temps à s'exécuter, et une Base de Données de l'objet qui doit être sauvé à la fin de tous les les demandes.

MyCoreDataObject *coreDataObject;

AFHTTPRequestOperation *operation1 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation1 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    coreDataObject.attribute1 = responseObject;
    sleep(5);
}];
[operation1 start];

AFHTTPRequestOperation *operation2 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    coreDataObject.attribute2 = responseObject;
    sleep(10);
}];
[operation1 operation2];

[context save:nil];

Bien sûr, cela ne fonctionne pas comme je veux, parce que les demandes sont asynchrones. J'ai essayé d'ajouter un NSOperationQueue comme suit:

NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
[operationQueue setMaxConcurrentOperationCount:2];

AFHTTPRequestOperation *operation1 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation1 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    coreDataObject.attribute1 = responseObject;
    sleep(5);
}];
[operationQueue addOperation:operation1];

AFHTTPRequestOperation *operation2 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    coreDataObject.attribute2 = responseObject;
    sleep(10);
}];
[operationQueue addOperation:operation2];

[imageQueue waitUntilAllOperationsAreFinished];
[context save:nil];

Cela ressemble un peu mieux. À l'aide de waitUntilAllOperationsAreFinished, ma file d'attente bloque le thread courant jusqu'à ce que mes demandes sont finis, mais pas jusqu'à ce que mon succès Blocs sont finis, ce qui est vraiment ce dont j'ai besoin.

Aucune idée sur la façon d'atteindre cet objectif dans un bon chemin?

InformationsquelleAutor choise | 2012-05-17