2012-01-20 4 views
3

Je me demande quelle est la meilleure façon de traiter une grande liste de données dans un UITableView en utilisant MonoTouch et sqlite-net? J'utilise le système MonoTouch.Dialog mais il semble que la plupart des développeurs MonoTouch chargent la collection puis construisent UITableView au lieu du chargement de type sur demande à mesure que les cellules apparaissent. J'ai vu des applications comme Twitter, et d'autres qui affichent des images et du contenu que vous faites défiler, des contacts, etc. et que vous voulez apprendre la bonne façon de le faire pour une application performante. Actuellement, mon application contient une petite quantité de données, donc je charge une collection à l'avance, mais j'ai besoin de retravailler cela.UITableView avec 500 éléments dans MonoTouch

Quelqu'un at-il des suggestions ou des exemples d'utilisation de MonoTouch pour gérer un UITableView avec une longue liste de lignes pouvant être chargées à la demande? Je pense que quelque chose comme ça est gérer avec CoreData pour les développeurs XCode, comment les développeurs MonoTouch gérer ce problème?

Merci.

+0

Quelle est la taille des articles? Si elles sont petites, les mettre toutes dans un IList <> ne devrait pas être une grande préoccupation. Si vous mettez correctement en cache vos cellules dans GetCell(), UITableView doit allouer suffisamment de cellules comme il le souhaite à tout moment. – Jason

+0

Chaque ligne retournée a seulement environ 6-10 colonnes, rien de grand. Cette liste pourrait atteindre des milliers, alors j'aimerais savoir que l'option équivalente est pour le chargement à la demande comme CoreData, je crois. Je n'ai vu personne utiliser vraiment CoreData dans MonoTouch ou si c'est nécessaire. Je pensais à obtenir un nombre d'enregistrements du jeu de résultats, puis à suivre le numéro de ligne et la requête à la demande en fonction de la visibilité de la ligne. Il y aurait beaucoup de requêtes par rapport à un avant, juste à la recherche de la meilleure pratique, comme dans une application Contacts. – Neal

Répondre

3

Ceci est une suggestion simple. Peut-être que cela ne correspond pas à vos spécifications, mais je vais l'écrire quand même. Peut-être que ça pourrait être utile.

Il y a quelques mois, je développais une application iPad avec MT et j'avais un problème similaire: récupérer beaucoup d'éléments d'une base de données SQLite et présenter des éléments dans un UITableView. Comme il était incovenient de charger des données une fois, j'ai suivi cette approche. Chargez dans le modèle un tas de données (disons 50 éléments). Une fois chargé, le modèle est utilisé pour présenter les données sur la table. Lorsque l'utilisateur atteint la fin de la table, je montre une étiquette "Show more" dans la section de pied de page pour cette vue de table. Ensuite, si l'utilisateur clique dessus, chargez à nouveau les données (50 autres éléments) et rechargez la table, et ainsi de suite.

Remarque Ma spécification devait contenir une seule section et plusieurs éléments.

Espérons que ça aide.

+0

C'est une bonne suggestion, j'ai vu des applications faire cela. Un peu comme "pagination", mais en utilisant une métaphore "Charger plus". Bonne suggestion. – Neal

+0

J'espère que ça aide. Peut-être upvote la réponse si vous voulez ... :-) –

+0

Vous les gars peuvent trouver une bibliothèque que j'ai écrit utile, et supprime le besoin d'avoir à montrer un article "Load More": https://github.com/jstedfast/ MonoTouch.SQLite – jstedfast

0

J'ai écrit une bibliothèque simple à utiliser qui prend en charge une grande partie de la logique de chargement incrémentiel de données de SQLite dans un UITableView appelé MonoTouch.SQLite. Vous pouvez trouver mon projet GitHub ici: https://github.com/jstedfast/MonoTouch.SQLite

La classe principale à regarder est la classe MonoTouch.SQLite.SQLiteTableViewController qui intègre également la prise en charge de la recherche. Je pense que vous trouverez que cela rend l'affichage des données d'une table sqlite extrêmement trivial.

N'hésitez pas à fourchez et modifiez-le comme bon vous semble!