Je dois effectuer plusieurs appels de service asynchrones dans l'application: didFinishLaunchingWithOptions: méthode de mon délégué d'application afin de récupérer certaines données d'un service à utiliser sur différents contrôleurs de mon application. J'ai le contrôle sur le service, et j'ai conçu l'API pour qu'elle soit aussi RESTful que possible, donc j'ai besoin de faire plusieurs appels pendant l'initialisation de l'application. Ce que je veux faire est de montrer une vue de chargement avec un indicateur de progression - semblable à l'écran de démarrage par défaut de Default.png - et de supprimer cette vue une fois que les appels de service ont terminé et j'ai les valeurs initiales dont j'ai besoin. C'est assez facile à faire s'il n'y a qu'un seul appel de service, puisque je peux simplement accrocher cette logique dans la méthode connectionDidFinishLoading: delegate de NSURLConnection en masquant la vue de chargement et en affichant le contrôleur racine. Cependant, avec plusieurs appels de service, il devient difficile. Je peux "enchaîner" tout ensemble et déclencher une requête, attendre qu'elle se termine/échoue, puis déclencher la deuxième requête, et ainsi de suite jusqu'à ce que j'arrive à la dernière requête. Dans la dernière requête, je cache alors la vue de chargement et affiche la vue normale. Cependant, cela peut devenir compliqué avec plusieurs appels de service, et le code devient difficile à comprendre et à suivre.Effectuer plusieurs appels de service sur l'initialisation de l'application iPhone
Des suggestions sur la meilleure approche pour cela?
Je pense qu'une solution consiste à avoir une classe singleton responsable de la réalisation des appels de service et de l'initialisation de l'application. L'objet singleton lancera toutes les requêtes nécessaires en parallèle au démarrage, et chaque rappel fail/finish vérifiera si chaque requête est terminée. Si toutes les demandes sont terminées, il peut appeler une méthode dans le délégué de l'application et lui indiquer de masquer la vue de chargement, afficher le contrôleur racine, etc.
Réflexions?
De cette façon, vous pouvez lancer toutes les demandes de service en même temps, au lieu de ralentir les choses en les sérialisant. – hotpaw2
Merci. C'est plus ou moins l'approche que je suis allé avec, puisque j'ai seulement quelques demandes et ai juste besoin d'une solution légère. Chaque requête qui se termine informe l'objet principal qu'une requête est terminée, et cet objet principal vérifie si toutes les demandes requises sont terminées avant de charger la vue principale de l'application. – pmc255