2010-04-16 21 views
1

Je navigue de tableview1.row à tableview2 qui contient BEAUCOUP de lignes. Étant donné que le temps de chargement est d'environ 3 secondes, je veux que la navigation glisse dans tableview2 dès que la tableview1.row est sélectionnée, puis affiche un UIActivityIndicatorView au-dessus de tableview2 pendant que les données sont récupérées puis affichées dans la vue table sous-jacente. Notez que tableview2 est en fait une sous-vue de l'UIView parent (par opposition au parent étant un UITableView).Affichage de l'indicateur d'activité dans la vue Table pendant l'extraction des données de ligne

Je l'ai vu ce post: Activity indicator should be displayed when navigating from UITableView1 to UITableView2

... ce qui donne des instructions pour ajouter l'indicateur d'activité de début et stopAnimating appelle autour des données dans viewDidLoad de vont chercher tableview2. Il est, je ne suis pas sûr comment la solution ci-dessus pourrait fonctionner pendant que viewDidLoad s'exécute et se termine avant que tableview2 glisse visiblement dans la vue.

Séparément, j'ai également essayé d'ajouter un indicateur d'activité sur tableview2 dans IB et ajouté le code d'animation start/stop de l'indicateur IBOutlet dans viewDidAppear. Qu'est-ce qui se passe est la récupération de données s'exécute et je peux voir l'indicateur tourne, mais à la fin de l'extraction, la vue de la table est vide. On dirait que viewDidAppear est trop tard pour ajouter des données à la vue de la table car cellForRowAtIndexPath etc a déjà été déclenché.

Quelqu'un peut-il suggérer des pointeurs? Je pourrais très bien manquer quelque chose d'évident ici (c'est près de 5h du matin où je suis et penser que mon cerveau est bouilli). Dois-je re-déclencher cellForRowAtIndexPath etc à partir de viewDidAppear? Le problème est-il que ma vue de table est une sous-vue et non la vue parente?

Merci

+0

Je suis curieux de voir quelle réponse les ninjas de cacao. La pile d'événements dans le cacao me laisse perplexe et je peux voir votre problème, mais malheureusement je ne peux pas vous aider car j'ai souffert du même genre de problèmes. – Kaili

Répondre

1

Je pris un autre regard sur ma propre question et la réponse est en fait assez simple. Tout traitement très intensif ne devrait généralement pas être exécuté sur le thread principal. J'essayais de faire mon affichage de l'indicateur d'activité de récupération de données et d'interface utilisateur intensive sur le même thread et donc ceux-ci étaient traités en séquence, l'un après l'autre. La solution est d'entrer mon nouveau contrôleur de vue et a) lancer l'animation de l'indicateur d'activité sur le thread principal, puis b) exécuter l'extraction de données intensive sur un autre thread (en utilisant performSelectorInBackground). Les mises à jour liées à l'interface utilisateur ne peuvent pas être appliquées à partir du thread d'arrière-plan. Ceux-ci devraient être remis au fil principal.

Beaucoup de SO messages sur ce déjà (exemple here), mon mauvais pour ne pas ramasser sur ces dès le début :)