# Envoi requête et retour xml : comprendre l'asynchrone.



## foo4web (5 Avril 2011)

Bonjour à tous.
Je tente de récupérer des infos d'une base distante sur pour une appli iPhone.

Je me dirige vers ce qui me parait le plus simple (enfin le plus documenté) : 
Un connexion à un serveur php, l'appel d'un fichier php qui exécute une requête dans la base, retourne le résultat sous forme de xml.
L'appli cliente iphone récupère ce xml, le parse, et l'interprête.


Ma question : 
L'utilisateur clique sur un bouton. Le système se met en branle. Mais que se passe t-il en attendant d'avoir la réponse à parser? Quelle est la solution la plus élégante ? Geler l'interface en attendant? 

Si la réponse met 10 secs à arriver et à être parsée et que pendant ce temps la l'utilisateur clique partout... ca ne le fait pas.

Comment gérez vous cette situtation?

Merci pour vos lumières.


----------



## Nyx0uf (5 Avril 2011)

Une NSURLConnection asynchrone ne bloquera pas le main thread.


```
NSURL* url = [[NSURL alloc] initWithString:@"blablabla"];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20];
_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
[request release];
[url release];
```


----------



## Céroce (5 Avril 2011)

En général, on affiche un NSProgressIndicator. Si vraiment tu veux bloquer toutes les interactions, tu le placeras dans une vue qui recouvre tout l'écran (par ex. noire, transparente à 50%). Ceci dit, souvent on va laisser la navigation bar accessible pour revenir au menu et arrêter le chargement.


----------



## foo4web (5 Avril 2011)

> Une NSURLConnection asynchrone ne bloquera pas le main thread.


Justement ! C'est un peu mon problème. 

Mais effectivement, comme le dit Céroce, l'utilisation d'un NSProgressIndicator me semble familière.  Quant à bloquer la page, oui ca peut être gênant si on veut interrompre le chargement sans quitter l'appli.

Merci pour vos réponses.


----------



## tatouille (5 Avril 2011)

foo4web a dit:


> Justement ! C'est un peu mon problème.
> 
> Mais effectivement, comme le dit Céroce, l'utilisation d'un NSProgressIndicator me semble familière.  Quant à bloquer la page, oui ca peut être gênant si on veut interrompre le chargement sans quitter l'appli.
> 
> Merci pour vos réponses.



ou ne pas avoir the beach ball, comprendre l'asynchrone ne se fera par le biais de l'UI mais par exemple l'utilisation de posix thread donc du vrai travail, par exemple moi je suis habitué a travailler sur une app fesant du realtime processing engageant 30 threads et tout leur mecanisme de sync avec lock ou sans lock et cross-platforme.


----------

