2010-10-28 16 views
1

Mon application ressemble à ceci:iphone - Pourquoi NSURLConnection connectionDidFinishLoading n'est pas en cours d'exécution?

J'ai un UIScrollView et il y a imageview à l'intérieur. J'ai implémenté le délégué scrollViewDidScroll de sorte que si le scroll faisait défiler, je créerais un NSURLConnection et je téléchargerais une donnée à partir d'une URL, pour une seule fois.

Le problème est que la connectionDidFinishLoading NSURLConnection ne peut être appelée ou exécutée qu'après que j'ai relâché mon doigt sur la vue défilement. Pour plus de clarté, si j'utilise mon doigt pour faire défiler le scrollview, je confirme que le NSURLConnection est créé, mais tant que je ne relâche pas le scrollview, le connectionDidFinishLoading n'est jamais appelé. Une fois que je relâche mon doigt, le délégué de connectionDidFinishLoading est appelé.

Quelqu'un peut m'expliquer s'il vous plaît?

Merci

+0

Bonjour, pourriez-vous poster un petit code pour avoir une meilleure idée du problème? – fedmest

Répondre

3

C'est parce que pendant le défilement de l'interface utilisateur entre un traitement de boucle modale les entrées de défilement de l'utilisateur, et jusqu'à ce que le défilement se termine votre fil ne sera pas revenir à la file d'attente de messages pour ramasser tous les messages délégué du NSURLConnection.

Vous pouvez exécuter NSURLConnection dans un thread distinct, qui doit continuer à pomper des messages lorsque l'utilisateur est en train de défiler, mais vous ne pouvez toujours pas appeler le thread d'interface utilisateur. Le chemin qui pourrait être d'avoir le thread de connexion écrit les données dans une structure de données sans verrou que le thread de l'interface utilisateur peut alors lire - mais cela risque d'être compliqué!