2010-11-19 3 views
1

J'ai une UITableView avec une cellule personnalisée que j'ai créée. La cellule a plusieurs étiquettes, un bouton de démarrage et un bouton d'arrêt, et un NSTimer qui se déclenche et s'arrête à partir des boutons.Réutilisation des cellules UITableView provoquant des problèmes NSTimer

Les étiquettes affichent des données provenant de sqllite (via des données de base) et la minuterie s'exécute individuellement pour chaque cellule séparée.

Tout cela fonctionne très bien jusqu'à ce que j'ai plus de cellules et la réutilisation des cellules est déclenchée. À ce moment-là, chaque cellule affiche les données correctes dans ses étiquettes, mais si je lance une minuterie pour la première cellule, au moment où elle sort de l'écran, la cellule suivante affiche (et réutilise ensuite la cellule précédente) bien.

Je n'arrive pas à comprendre comment garantir que chaque cellule possède son propre thread minuteur avec réutilisation des cellules.

Toute aide serait appréciée.

Répondre

5

Dans votre cas, les cellules ont un état interne (minuterie). Lorsque la cellule est réutilisée, son état est perdu (ou même la cellule réutilisée héritera de l'état précédent). Vous avez deux options

  • ne pas réutiliser les cellules
  • rendent les cellules sans état (par exemple, déplacer vos minuteries au contrôleur)
+1

ne réutilisant pas les cellules est stupide, mais qui rend les cellules sans état est la façon dont on doit toujours aborder le problème. +1 sur ce point seulement. – jer

+0

Votre réponse m'a aidé à comprendre le niveau d'état de chaque cellule. J'ai pu maintenir mon minuteur dans la cellule et gérer les données affichées en conséquence. Merci encore. – Rod

+0

@Rod, pouvez-vous montrer votre solution? – Yijun

Questions connexes