0

Salut à tous, serait vraiment apprécier un peu d'aide à ce sujet - je visais un rendement élevé w.r.t données va chercher et l'utilisation de la mémoire.moyen le plus efficace pour gérer variablement taille cellules UITableView et récupérer des données associées efficacement

J'ai un magasin de données de base, le stockage table des éléments de contenu (de tocEntity): Titre de l'article, le numéro de page. Une page peut contenir plusieurs articles, et les numéros de page peuvent exister ou non, c'est-à-dire si vous avez un article de 5 pages commençant à la page 3, vous ne disposerez d'aucun article. entrées pour les pages 4-7.

Lorsque j'affiche ci-dessus en vue de la table, chaque cellule affiche tous les articles nom pour une page, de sorte que certaines cellules auront un seul nom de l'article, tandis que d'autres pourraient avoir 10 (ou plus)

Aucun problème pour obtenir les cellules sont bien finies, mais je suis intéressé à extraire efficacement les données uniquement pour ce qui est actuellement nécessaire pour la vue de la table (le fonctionnement de NSFetchedResultsController) - le problème est qu'il n'y a pas 1 entrée de données par cellule, mais des quantités variables. Donc, si NSFetvhedResultsController dirait (obtenez-moi les données pour les cellules 12-17) - cela ne se traduirait pas par une récupération de données de base unique.

Toute idée comment aller sur l'implémentation de cela?

Répondre

0

Dans viewDidLoad récupérer toutes les données dans un NSArray puis utiliser ce tableau dans les méthodes DataSource UITableView au lieu des appels en direct. Si vous souhaitez actualiser les données, remplissez à nouveau le tableau à partir des données et appelez le reloadData sur la tableview.

+0

Voilà comment je le fais, mais ce n'est pas une solution économe en mémoire à tous, et non évolutive - il est possible que seulement 1% du total des données pourrait être affiché sur l'écran 1 fois ... – brucem

+0

Malheureusement, la façon dont le code pomme fonctionne (comme vous l'avez constaté) est qu'il appelle les mêmes méthodes BEAUCOUP de fois lors du rendu. La seule chose que vous pouvez faire est de limiter le nombre de lignes, puis de détecter le défilement et d'insérer des lignes dans la table, mais je ne le recommanderais pas. –

+0

Il est également intéressant de souligner que CoreData est en défaut, ce qui signifie que même si vous avez vos objets de données de base dans un tableau, vous ne tenez pas le graphe d'objet entier en mémoire, lorsque vous accédez à une propriété sur un objet il des défauts qui se traduit par CoreData aller chercher ces données, c'est très efficace. –

0

Si possible, je vous recommande de grouper tous ces liens dans une section de vue de la table, plutôt que de les regrouper dans une ligne de vue de la table. En effet, les cellules à hauteur variable peuvent réduire les performances de défilement.

+0

Je l'ai considéré - mais il en résultera une table avec beaucoup de sections unicellulaires (plus courantes que celles à plusieurs lignes), ce qui semblera assez maladroit? Y a-t-il un moyen de faire en sorte que chaque section rejoigne la section précédente, c'est-à-dire qu'il n'y ait pas d'écart entre les sections? – brucem

+0

Je ne sais pas exactement à quel endroit vous faites référence. Si les sections posent problème, vous pouvez essayer d'utiliser une ligne non indexée pour représenter une page, suivie de lignes en retrait représentant les liens de page. –

+0

itérez-vous l'ensemble du tableau des résultats pour regrouper les noms d'articles par page? Si tel est le cas, chaque objet du tableau est mis en échec lorsqu'il est accédé à la propriété. Pour améliorer les performances, vous devez déterminer un moyen de renvoyer les entités déjà triées et regroupées pour l'affichage. En ce qui concerne les sections, vous pouvez également retourner une vue personnalisée pour les sections de table, qui peuvent inclure un triangle de divulgation, etc. –

Questions connexes