2010-02-08 6 views
3

J'ai un UITableView que je charge via JSON. Donc, ma logique va comme ceci:UITableView mise à jour via JSON, animation Insertion de ligne

  1. Fetch JSON (NSOperation, rappel au thread principal)
  2. En rappel, parser le JSON, et insérer de nouvelles données dans mon tableau de tableau source de données.
  3. Appelez reloadData sur TableView pour afficher les nouvelles données.

Ma question est: Comment puis-je ANIMER l'arrivée de nouvelles lignes dans la table? En ce moment, je les ai tous créés à la fois, et ce que je veux faire, c'est les animer, parce que ça a l'air bien plus cool.

Je pense que ce que je veux est d'utiliser:

[self.theTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationRight]; 

Mais cela me donne l'exécution des plaintes au sujet de la taille de la mise à jour étant différente de la taille de la source de données. Ai-je manqué quelque chose sur la façon dont cette méthode devrait être utilisée? Est-ce que quelqu'un sait d'un exemple où quelqu'un est l'animation de nouvelles lignes dans un TableView via ce modèle?

Mise à jour: En fait, je l'ai résolu ceci grâce à la direction de Ben, l'approche suivante:

  1. Commencez par [self.theTableView beginUpdates];
  2. Lorsque je boucle sur mes entrées dans le JSON, insérez-les au début de mon tableau, en incrémentant leur index à chaque fois à travers la boucle.
  3. Appel insertRowsAtIndexPath chaque fois à travers la boucle, comme ceci:

    NSIndexPath * indexPath; indexPath = [NSIndexPath indexPathForRow: [self.theChatEntries indexOfObject: message] inSection: 0]; [self.theTableView insertRowsAtIndexPaths: [NSArray arrayWithObject: indexPath] avecRowAnimation: NO];

  4. Terminer avec endUpdates en dehors de la boucle.

Woot.

Répondre

0

Vous êtes sur la bonne voie; vous devez envelopper vos appels à -insertRowsAtIndexPaths: withRowAnimation: avec un [self.theTableView beginUpdates] et [self.theTableView endUpdates].

+0

J'ai essayé cela mais quand j'obtiens la toute première ligne du JSON, il se bloque avec ceci: 'Mise à jour invalide: nombre de lignes invalides dans la section 0. Nombre de lignes contenues dans une section existante après la mise à jour (1) doit être égal au nombre de lignes contenues dans cette section avant la mise à jour (0), plus ou moins le nombre de lignes insérées ou supprimées de cette section (0 inséré, 0 supprimé). ' – Genericrich

+0

Accepté pour me diriger sur la bonne voie. Mise à jour de la question pour la postérité. Merci! – Genericrich

Questions connexes