2

Je travaille sur une application qui est très simple un contrôleur de navigation avec une vue de table lorsque l'utilisateur clique sur une ligne, il est dirigé vers la vue détaillée. Cependant, la vue des détails extrait les données des données de base. Je tire une quantité relativement importante de données qui prend environ trois secondes à charger.UIActivityIndicatorView avec UITableView dans le contrôleur de navigation

Je voulais ajouter ce UIActivityIndicatorView pour montrer la progression.

J'ai essayé de lancer l'animation une fois que l'utilisateur clique sur la ligne, donc je l'ai mis à animer dans didSelectRowAtIndexPath

Pour une raison quelconque, l'indicateur d'activité ne démarre pas avant la poussée des détails voir.

Une idée pourquoi? ou la meilleure façon de mettre en œuvre une telle idée?

~ Adham

+0

Je viens couru à travers un poste par Matt Gallagher sur la création d'une vue réutilisable Indicateur d'activité. Cela peut être utile. http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html –

+0

Merci Matt, j'ai vu que ... ce qui m'a le plus aidé c'est un chapitre du livre "iPhone Cool Projects". Avait une étape par étape et je pouvais le faire .. merci encore – Adhamox

Répondre

3

Parce que vous commencez l'animation, puis lancer une grande opération dans le même fil. Pensez à exécuter cette opération de 3 secondes dans un nouveau thread. Regardez NSOperationQueue puis créez un NSOperation pour exécuter cette procédure. Cela fonctionnera de cette façon.

+0

Mettre le Core Data récupérer dans son propre thread va libérer l'interface utilisateur pour démarrer et arrêter l'indicateur d'activité. Je recommande fortement soit d'utiliser NSOperation et NSOperationQueue pour les opérations d'extraction, soit d'instancier un thread séparé pour l'extraction. –

+0

Merci d'avoir répondu ... Mais pouvez-vous s'il vous plaît me donner un lien vers un tutoriel sur l'utilisation de cela? toutes les pages que j'ai trouvées jusqu'à maintenant sont très compliquées. Je n'utiliserai cette file qu'une seule fois pour récupérer mon enregistrement. – Adhamox

1

L'interface utilisateur ne se met pas à jour jusqu'à la fin de votre boucle d'exécution. Vous êtes, en séquence, affichant le moniteur d'activité, puis en poussant la nouvelle vue de table, et puis les mises à jour de l'interface utilisateur. Vous devez changer cet ordre.

Vous pouvez soit déplacer quelque chose vers un autre thread, soit retarder le chargement de la nouvelle vue de table en appelant performSelector:afterDelay: avec un retard de 0. Cela retardera le chargement de la nouvelle vue de table après l'indicateur d'activité apparaît dans l'interface utilisateur. Maintenant, tout est toujours dans le même thread, donc vous serez bloqué de faire quoi que ce soit, mais si l'animation est enfilée dans le moniteur d'activité, cela rendrait une solution rapide et facile.

+0

Excellente solution! Cela a fonctionné parfaitement. – Vinnie

Questions connexes