12
votes

AFNETWORKING: EnqueueBatchofhtTPEQuRéstopérations Problème avec le bloc d'achèvement

J'utilise cette méthode Afnetworking pour démarrer plusieurs demandes à la fois:

- (void)enqueueBatchOfHTTPRequestOperations:(NSArray *)operations 
                              progressBlock:(void (^)(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations))progressBlock 
                            completionBlock:(void (^)(NSArray *operations))completionBlock


0 commentaires

3 Réponses :


1
votes

Si c'est possible, la solution la plus simple peut être simplement pour déplacer votre code de traitement du bloc de réussite de chaque opération au bloc d'achèvement de l'ensemble du lot.

Vous avez le NSARRAY * Opérations Disponible dans le bloc d'achèvement, vous pouvez itération via les opérations et rechercher: xxx

Vous avez également l'adresse URL pour chaque opération disponible via l'opération . URL Propriété si vous devez préformer différentes actions


3 commentaires

OP a dit que le JSON n'est toujours pas traité lorsque l'achèvement est appelé, cela ne fonctionnerait pas, non?


Oui, c'est pourquoi je demande. Donc, cette réponse ne m'aidait pas.


Oh je suis mal j'ai mal lu. Quant à votre problème, il pourrait y avoir un correctif bientôt si vous pouvez attendre. Github.com/afnetworking/afnetworking/issues/362



0
votes

Vous pouvez déplacer votre opération JSON au début de la file d'attente, puis ajouter une dépendance afin qu'une autre opération puisse seulement démarrer après la fin de l'opération JSON:

    [lastOperation addDependency:jsonOperation]


2 commentaires

Pourriez-vous être plus précis ?


Je suppose que quelque chose comme ceci: Si (précédenteOPERATION) {[Opération AddDePendance: PrécédentOrtère]; } PrécédentOrtère = opération; [Opérations AddObject: opération]; Ça n'a pas fonctionné pour moi



0
votes

Il semble qu'il n'y ait pas de moyen facile de faire exactement ce que la PO demande, alors voici quelques solutions de contournement faciles.

une stratégie plutôt émoussée serait d'utiliser AFHTTPEQUESTOPERATION au lieu de AFJSONRQUESTOPERATION puis convertissez la réponse à l'aide de nsjsonsorialisation .

de sorte que le bloc de réussite de l'opération ressemblerait à xxx

Les mises en garde s'appliqueraient - pour les grandes réponses JSON Ceci est potentiellement bloquant le code et certaines des travaux de contournement Afnetworking à NSJSONSerialization ne s'appliqueraient pas. Mais cela vous aiderait.

MISE À JOUR: Le premier commentateur ci-dessous suggère d'utiliser AFJSONREQUESTOPERATION et appelant de réponse le bloc d'achèvement du lot. Je suis bon avec ça si votre situation le permet. Dans mon cas d'utilisation actuel, il complique un peu mon code (j'utilise un ensemble mixte d'appels JSON, le code est donc plus propre si je peux la conserver dans un bloc de réussite directement associé à l'opération).


1 commentaires

Il serait plus logique d'utiliser l'opération JSON et d'appeler simplement ResponsifJson sur celui-ci dans le bloc d'achèvement du lot. Cette méthode renvoie de manière synchrone. Cela fournit le comportement que l'OP veut sans les mises en garde que vous mentionnez.