2010-10-25 4 views
0

Je fais une requête synchrone au service Web et je n'arrive pas à afficher l'alerte de chargement. Comme je suis incapable d'accéder à l'interface utilisateur lors de la demande synchoronous.iPhone Demande synchrone

Pouvez-vous quelqu'un s'il vous plaît me guider pour montrer l'indicateur d'activité lorsque je fais une demande synchrone.

Est-il possible d'afficher le message de chargement si vous exécutez la requête synchrone dans le fil d'arrière-plan.

Cordialement, Malleswar

Répondre

1

oui c'est possible de le faire.

Vous ne devriez jamais bloquer le thread principal d'une application avec une interface utilisateur comme vous l'avez décrit - considérez toujours ceci dans vos conceptions.

Il existe quelques approches pour y parvenir. NSOperation est un bon point de départ. Vous allez donc créer une sous-classe NSOperation qui exécutera la requête, puis notifiera quelque chose que la requête a terminée et fournira les données préparées.

1) démarrer votre indicateur de progression

2) ajouter l'opération

3) arrêter l'indicateur une fois la transaction (NSOperation au contrôleur) a terminé. indice: utilisez performSelectorOnMainThread:… à partir de l'opération.

+0

Merci pour la description détaillée. Pouvez-vous me fournir un code ou un exemple de téléchargement pour l'implémenter? – user304804

+0

Vous pouvez faire sans sous-classe NSOperation. Utilisez simplement 'performSelectorInBackground'. Cela générera automatiquement un nouveau thread. – Rengers

+0

oui, il existe des alternatives. 'performSelectorInBackground:' est souvent léger en SLOC, mais lourd en performance (comparé aux NSOperations). Je trouve NSOperations sont également un bon point de départ pour l'organisation et la réutilisation, mais les cas peuvent varier. une requête de service Web est assez compliquée si vous tentez de gérer des échecs potentiels. C'est donc un bon candidat pour une implémentation solide, structurée et réutilisable dont les arguments et l'invocation peuvent être contenus par une opération. Voilà pourquoi je le suggère. – justin

0

Je recommande l'exécution de la demande dans un thread d'arrière-plan. J'utilise toujours la bibliothèque ASIHTTPRequest pour effectuer des requêtes asynchrones. Dans les méthodes de rappel, vous pouvez mettre du code pour basculer la visibilité de l'alerte de chargement.

+0

Merci pour la réponse rapide. Mais j'ai déjà commencé avec NSData * data = [NSURLConnection sendSynchronousRequest: theRequest returnResponse: & erreur de réponse: & error]; (sa méthode de classe différente) et l'appel direct de cette méthode depuis UIthread. Je ne peux pas changer à ce stade. Pouvez-vous s'il vous plaît me guider pour appeler cette méthode dans le fil de fond et montrer l'indicateur d'activité pendant que la demande est en cours d'exécution. – user304804