2 votes

Remplir un UITableView avec des données

Tout d'abord, bien que je comprenne certaines des bases, je suis encore un peu novice.

J'ai une section UITableView que j'utilise actuellement NSDictionary (pour le regroupement) et 4 ou 5 NSArrays différents (pour les données, dont certaines sont transmises à la vue suivante lorsqu'une cellule est sélectionnée) pour remplir le tableau. Cela fonctionne, mais la liste est très longue et, après quelques minutes de défilement, l'élément UITableView de haut en bas, en quittant cette vue et en y revenant, l'application commence à "ralentir" et finit par se bloquer. J'ai fait quelques recherches et j'ai découvert que la façon dont je procède n'est pas la meilleure. J'ai lu qu'il fallait utiliser un autre objet pour remplir la table, ce qui ne chargera les données qu'en cas de besoin et ne les gardera pas en mémoire (ce qui est probablement à l'origine du blocage de mon application).

Est-ce que quelqu'un peut m'aider à construire un "objet de données" pour stocker mes données et les utiliser ensuite dans mon projet de développement ? UITableView ? Puis-je simplement prendre mon NSDictionaries y NSArrays et de les placer dans leur propre classe et d'appeler cette classe ? Devrais-je utiliser Core Data ? D'autres suggestions ? Pour rappel, ces données ne peuvent pas être ajoutées, mises à jour ou supprimées par l'utilisateur. La seule fois où je modifierai les données, ce sera pour en ajouter d'autres (un nouvel enregistrement) afin d'allonger la liste et, de temps à autre, mais très rarement, pour les mettre à jour ou les supprimer.

Toute aide serait grandement appréciée.

1voto

Sagar R. Kothari Points 9606

0voto

Edward Chin Points 734

Il est vrai que l'UITableViewController est plus efficace lorsqu'il est couplé à CoreData . Pour ce faire, vous devriez vous tourner vers NSFetchedResultsController. Si vous voulez un moyen facile d'accéder à CoreData, utilisez Enregistrements magiques . Il est très facile à utiliser et très efficace.

Toutefois, il convient de noter qu'un NSDictionary contenant plusieurs NSArrays remplis de milliers de NSStrings ne devrait pas poser de problèmes de mémoire. Le fait que vous soyez en mesure de charger cette structure en mémoire suggère que vous pouvez conserver l'ensemble de la structure de données en mémoire. Le fait que vous ralentissiez et que vous vous bloquiez lors du défilement signifie que le problème de mémoire provient de l'instanciation de la cellule UITableView.

Voici quelques points à vérifier :

  1. Savez-vous utiliser les instruments ? Si c'est le cas, vérifiez s'il y a des fuites de mémoire.
  2. Recevez-vous didReceiveMemoryWarning dans votre UITableViewController ? Je pense que oui. Mais vous voulez être sûr qu'il ne s'agit pas d'un problème de blocage de thread.
  3. Utilisez-vous des images dans vos cellules UITableViewCells ? Si vous avez des milliers d'images, vous devez absolument utiliser un NSCache pour les stocker. Cela permettra de libérer automatiquement de la mémoire en cas de besoin.
  4. Utilisez-vous des cellules UITableViewCells personnalisées ? Puisque vous constatez un ralentissement dû au défilement, vérifiez que la cellule personnalisée n'a pas de problème de dessin.
  5. Veillez à ce que les cellules soient retirées de la file d'attente. Cela est fait dans le code du modèle UITableViewController, mais vous l'avez peut-être supprimé pour une raison quelconque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X