Plusieurs requêtes simultannées

Bonjour,



dans mon projet j'ai un viewcontroller dans lequel je dois récupérer et afficher des informations de plusieurs webservices. J'utilise le protocole oauth pour identifier l'utilisateur. Je dois donc utiliser une class OAMutableRequest (qui étend NSMutableRequest) pour effectuer mes requêtes.



Lorsqu'il y en a une seule à  faire cela ne me pose pas de problème. Seulement, quelle est la méthode pour faire plusieurs requêtes simultannées ? En sachant que je souhaiterai afficher un indicateur de chargement jusqu'à  ce que la dernière requête soit effectuée.



Je sais qu'il y a une technique avec ASIHTTPRequest, mais dans mon cas je ne sais pas trop comment faire...



Merci d'avance

Réponses

  • Ben déjà  ASIHTTPRequest est mort, tu peux voir dur côté de AFNetworking qui est encore plus puissant.



    Lis un peu la doc c'est pas super compliqué, tu pourras faire des requêtes asynchrones etc, le tout en utilisant des blocks image/smile.png' class='bbc_emoticon' alt=':)' />
  • Passer par un NSOperationQueue (c'est dans la doc ASI ...)
  • @Steph les blocks oui c'est cool mais ils ne sont pas le provider d'operations
  • Personnellement je travail toutes mes requêtes asynchrones avec GCD. Une file secondaire dans laquelle j'envois tous les blocks d'exécution et dans les blocks je génère des notif / appel de méthode pour les indicateurs de chargement.



    À savoir que je n'utilise quasiment jamais d'activity indocator linéaire mais que des infinies, ça évite de frustrer l'utilisateur sur une progression qui n'avance pas ou qui est mal calculé.
  • C'est vrai que sur des requêtes de ce type GCD ou NSOperationQueue peut-être sympa. J'utilise surtout AFNetworking pour télécharger des images de manière asynchrone dans un tableView, comme il gère le placeholder en plus, c'est top.



    Yoann je te rejoints à  100% pour l'indicateur, en général je mets un indicateur infini aussi et je change un label en dessous si il y a différentes étapes pour que l'utilisateur voit que ça avance image/smile.png' class='bbc_emoticon' alt=':)' />



    Le linéaire, je l'utilise juste pour le téléchargement de fichier.
  • je parlais en fait bien d'activity indicator infini, mais ce n'était pas clair je l'avoue image/smile.png' class='bbc_emoticon' alt=':)' />



    je vais regarder du côté de NSOperationQueue.



    Merci beaucoup !
  • Avec NSOperationQueue tu peux "bind" ton activity indicator sur le nombre d'opération en cours.



    Enfin tu peux observer la propriété dans ton code et agir en fonction vu que les bindings n'existent toujours pas sur iOS...
  • Je reviens vers vous car j'ai un nouveau soucis.

    Deux de mes requêtes sont asynchrones: lorsqu'elles sont envoyés, le résultat est retourné par le biais d'une méthode :


    • didFinishWithData: (si succès)




    • didFailWithError: (si échec)




    Seulement, avec NSOperationQueue, la requête est considérée executée en fin de la méthode qui l'exécute, mais je ne passe pas dans les méthodes ci-dessus.



    Comment gérer NSOperationQueue avec des requêtes asynchrones et synchrones?



    Merci
  • Il faut que tu gère ta sous classe de NSOperation avec un start au lieu de main et que tu implémente les méthodes de fin pour signaler quand ton opération est finie. La doc l'explique bien.
  • Merci pour la réponse. y a-t-il des exemples concrets ?

    j'ai fait un tour des forums, je ne trouve pas comment exécuter trois requêtes asynchrones simultanément, et savoir quand la plus longue s'est terminée pour stopper l'activity indicator.
  • yoannyoann Membre
    mai 2012 modifié #12
    'Axton56' a écrit:


    Merci pour la réponse. y a-t-il des exemples concrets ?

    j'ai fait un tour des forums, je ne trouve pas comment exécuter trois requêtes asynchrones simultanément, et savoir quand la plus longue s'est terminée pour stopper l'activity indicator.




    À la fin de chaque opération, tu envois une notification "trucmucheoperationdone" et dans l'écouteur de cette notif, tu check le nombre d'opération en cours sur ta NSOperationQueue



    Edit:



    Tu peux aussi faire du KVO sur le nombre d'opérations comme je le disais plus haut.
Connectez-vous ou Inscrivez-vous pour répondre.