2015-10-11 1 views
0

Je voudrais utiliser NSURLSession et dataTaskWithURL:completionHandler: pour télécharger 4 URL différentes en NSData objets. Je sais que je peux appeler:NSURLSession, plusieurs tâches de données, completionHandler

[session dataTaskWithURL completionHandler:^(NSData* data, NSURLResponse* response, NSError* error) { 
    // handler 
}]; 

Une fois ceux-ci sont ajoutés à la session, je sais que je peux commencer par les [task resume]. Est-il possible de dire à la session de commencer simplement toutes les tâches que j'ai ajoutées à elle?

Mais comment puis-je être informé lorsque les quatre sont terminés (avec une erreur ou autre)? Ai-je besoin de garder une sorte de dictionnaire thread-safe autour pour garder une trace de l'état de chaque tâche? Mon but est qu'une fois que ceux-ci sont téléchargés, j'ai besoin de démarrer une minuterie afin que les mêmes quatre URL puissent être téléchargées à nouveau dans le futur.

Répondre

0
  1. Non, il est impossible de démarrer plusieurs tâches à la fois. Oui, vous devez conserver un dictionnaire pour stocker les réponses, en utilisant les tâches de données en tant que clé. Effectuez toutes les modifications et tous les accès sur le thread principal pour des raisons de sécurité.

Vous pouvez également envisager un groupe de répartition, comme décrit dans this question.