NSOperationQueue finie, comment le savoir ?
Salut,
J'utilise dans une appli une NSOperationQueue, sur deux opération AFNetworking.
Comme j'affiche une fenêtre de chargement, j'ai besoin de savoir quand les opérations de la "queue" sont terminées pour faire le dismiss, mais je ne vois pas comment faire. J'ai tatonné avec un addObserver mais sans succès.
Pour la queue, j'utilise juste ce code :
Merci de votre aide /smile.png' class='bbc_emoticon' alt=':)' />
J'utilise dans une appli une NSOperationQueue, sur deux opération AFNetworking.
Comme j'affiche une fenêtre de chargement, j'ai besoin de savoir quand les opérations de la "queue" sont terminées pour faire le dismiss, mais je ne vois pas comment faire. J'ai tatonné avec un addObserver mais sans succès.
Pour la queue, j'utilise juste ce code :
<br />
NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];<br />
[queue addOperation:teamOperation];<br />
[queue addOperation:champOperation];<br />
Merci de votre aide /smile.png' class='bbc_emoticon' alt=':)' />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
et
Mais je ne sais pas si c'est la meilleure méthode /smile.png' class='bbc_emoticon' alt=':)' />
Tu devrais remplacer @operations avec @operationCount, aussi il faut que tu passes un context:
Il est important que le contexte soit unique et donc utiliser l'adresse d'une variable static est la meilleure façon d'avoir une valeur unique. Tu peux, par mesure de sécurité, vérifier que object == self.queue aussi.
En fait, pendant mes opérations, je vais chercher un fichier JSON avec AFNetworking, une fois que j'ai le fichier, je test si je dois mettre à jour ma base coredata et si oui j'exécute une méthode qui enregistre les données. Je viens de m'apercevoir que par exemple, quand ma méthode d'enregistrement est appelée je ne reçois jamais la notification de fin de queue.
Je m'en suis apercu car quand mon operation count est à 0 je lance un NSNotification.
Il doit y a voir un problème entre le main thread et le thread de ma notif ou truc du genre.
Du coup, je réfléchi à une autre conception pour voir.
Chaque opération AFNetwork est dans une méthode à part et retourne un block.
Dans une méthode globale, j'appelle les methodes qui démarrent les opérations en testant les blocks et en imbriquant celles-ci (quand la première a répondu, j'envoie la deuxième etc), sur la dernière, je place un NSNotification qui envoie à ma vue principale que la mise à jour est ok et qu'on peut passer à la suite.
J'ai diviser le temps de traitement par 5, ma vue attends les données pour les afficher et tout fonctionne à merveille /smile.png' class='bbc_emoticon' alt=':)' />
Cherry on the cookie, pas un leak LOL
Edit : et donc plus de NSOperationQueue /tongue.png' class='bbc_emoticon' alt=':P' />
Je reconnais que s'il n'y avait pas de lien, ça serait pas le top !
J'aimerai lancer plusieurs requêtes asynchrones en même temps et pouvoir connaà®tre la fin de toutes les requêtes.
Dois-je utiliser NSOperationQueue ?
Y'a t-il un meilleur moyen d'arriver à mes fins ?
Par avance, merci.
Je sais quand il ne reste plus de requêtes à exécuter mais pas quand elles sont terminées, y compris avec un waitUntilFinished.
Je continue mes recherches ..
Par exemple prévoir un NSMutableSet* pendingRequests, mettre les requêtes / AFHTTPRequestOperations dedans avant de les lancer, dans le completion de chaque requête, enlever la requête correspondante du set pendingRequests, et regarder si pendingRequests.count est tombé à zéro après ce remove.
Bon ce n'est qu'une solution parmi d'autres, sans doute pas la seule possible.
Enfin je l'espère. En tout cas, merci.
Mon pauvre, vu comment ça simplifie les choses, moi je ne peux plus m'en passer /kiss.gif' class='bbc_emoticon' alt=':-*' />