Mon application appelle un service Web pour charger les données. Chaque fois que j'envoie la requête, la méthode connection: didReceiveData: est invoquée très rapidement, et je mets une instruction NSLog dans cette méthode, je peux voir que les données que je reçois sont identiques à celles affichées dans le champ d'en-tête Content-Length. Il ne devrait donc plus y avoir de données à recevoir. En fait, connection: didReceiveData n'est plus invoqué. Mais mon connectionDidFinishLoading est invoqué exactement 1 minute plus tard à chaque fois. Une idée de ce qui se passe?connectionDidFinishLoading n'est pas appelé immédiatement
Répondre
connection:didReceiveData:
est appelée plusieurs fois. Vous devez prendre ces données et les ajouter aux données que vous avez reçues la dernière fois qu'elles ont été appelées. Ce n'est que lorsque vous recevez connectionDidFinishLoading
que vous savez que le transfert est terminé et que vous avez toutes ces données.
Donc, juste parce que vous recevez des données ne signifie pas que c'est fait. Il est très probable que le serveur prenne autant de temps pour finaliser la demande ou d'autres problèmes quelque part dans votre code, comme un traitement excessif des données dans vos rappels retardant l'exécution du rappel final.
Non, je mets une instruction NSLog à l'intérieur de la connexion: didReceiveData: méthode, je suis sûr qu'elle n'est appelée qu'une seule fois dans ce cas. – user556623
- 1. connectionDidFinishLoading n'est pas appelé, pourquoi?
- 2. connectionDidFinishLoading sans appeler didReceiveData?
- 3. script Bash ne pas sortir immédiatement quand `exit` est appelé
- 4. fermeture d'achèvement Swift UIView animateWithDuration immédiatement appelé
- 5. UITableView reloaddata ne recharge pas immédiatement
- 6. Java Stack/Nest Count
- 7. Going Back après connectionDidFinishLoading
- 8. SocketRocket se bloque après connectionDidFinishLoading
- 9. iphone - Pourquoi NSURLConnection connectionDidFinishLoading n'est pas en cours d'exécution?
- 10. onBackPressed pas appelé immédiatement - Pas de clavier pour id 0 - Android
- 11. C# Nest ElasticSearch Impossible de mapper "token_chars" à Nest fluentMapping
- 12. Pourquoi le dealloc est-il appelé immédiatement après l'instanciation?
- 13. Ni connectionDidFinishLoading: ni didFailWithError: obtenir invoquaient
- 14. créer une notification de connectionDidFinishLoading
- 15. Réception d'erreurs dans connectionDidFinishLoading, EXC_BAD_ACCESS
- 16. ProgressDialog n'apparaît pas immédiatement
- 17. Balises HTML Un-nest
- 18. XDocument référence null sur l'objet qui nest pas null
- 19. Itinéraires Nest Noir
- 20. Création d'un index Nest
- 21. Groupe de mappage NEST
- 22. Problème Objective-C avec connectionDidFinishLoading et Delegate
- 23. Modèle Nest enregistrer sans parent
- 24. repeindre ne pas être appelé
- 25. NEST - Indexer des champs individuels
- 26. nest API comment obtenir access_token
- 27. setsize ne redimensionne pas immédiatement
- 28. Ext.data.Store ne recharge pas immédiatement
- 29. iPhone UITableView à partir de connectionDidFinishLoading
- 30. Échec de l'assertion dans GTMHTTPUploadFetcher connectionDidFinishLoading
Lorsque vous appuyez sur le service avec curl ou un navigateur Web, avez-vous une indication que la fin de la demande est plus courte? – Walter
Puisqu'il s'agit d'un webservice, je ne sais pas comment utiliser curl pour faire cet appel de service web, je me demande simplement si c'est possible. Cependant, si mon programme n'effectue probablement pas l'appel webservice, c'est le message d'erreur de retour du serveur, c'est rapide. Le délai n'arrive que lorsque j'obtiens les données correctement. Je me demande juste si le problème côté serveur parce que j'utilise mon programme pour appeler un autre webservice qui est public et gratuit sur le web, j'ai aussi obtenu le résultat très rapidement. – user556623
Maintenant, je me demande comment NSURLConnection pour juger si les données sont terminées et ensuite appeler la méthode connectionDidFinishLoading. Quelque chose comme un '\ 0' pour indiquer les données est le transfert de finition? Ou simplement comparer la longueur du contenu dans l'en-tête HTTP et les octets sont reçus? S'il est jugé par '\ 0', le côté serveur n'envoie pas cet octet donc mon programme attend jusqu'à ce qu'il soit en interne (c'est pourquoi il retarde exactement 1 minute pour appeler connectionDidFinishLoading à chaque fois?) Il suffit de deviner. – user556623