2010-07-06 6 views
1

J'ai donc un UITableView dans lequel je fais des batch insert/delete/recharges. De temps en temps, les données de la liste changent, donc je met à jour les différences dans la liste. J'insère essentiellement de nouvelles lignes, supprimant des lignes qui ne sont plus là, et rechargement de lignes qui existent à la fois dans l'ancienne et la nouvelle donnée. Par exemple:Insertion par lots et suppression + Rechargement de vieilles cellules = Exception

Avant, les données de la liste ressemble à ceci:
0: pomme
1: banane
2: carotte

Après, les données de la liste ressemble à ceci:
0: banane
1: carotte
2: chien
3: éléphant

Cela se traduit par la suppression de la ligne 0, les lignes 1 de rechargement et 2, et l'insertion aux lignes 2 et 3. L'ordre que j'appelle les méthodes est également de cette façon: supprimer, puis recharger, puis insérer des lignes. Cependant, cela génère une exception puisque je fais deux animations différentes sur la ligne 2 (rechargement et insertion). Est-ce un problème de commande, ou mes indexPaths sont-ils incorrects? Remarque: Je dois recharger les anciennes cellules, car les données de cette ligne peuvent avoir changé, mais ne doivent pas être représentées par une insertion/suppression.

Editer: Bizarrement, cette erreur se produit uniquement dans les versions iOS antérieures à iOS4.

+1

Apple propose un excellent didacticiel vidéo qui couvre certains de ces aspects dans le cadre des vidéos de la WWDC 2010. Il s'intitule «Mastering Table Views» ou quelque chose de similaire http://developer.apple.com/videos/wwdc/2010/. .their leur méthode l'explique bien et utilise des animations sympas (mais faciles) aussi – iwasrobbed

+0

WWDC 2011: [UITableView Changes, Tips & Tricks] (https://developer.apple.com/videos/play/wwdc2011/125/) –

Répondre

1

Je dirais supprimer 0, et insérer 3 et 4. Le rechargement ne devrait pas être nécessaire. L'ordre dans lequel vous envoyez les mises à jour est sans importance. Assurez-vous que votre modèle reflète les modifications avant de parler des mises à jour. Enveloppez les appels avec -beginUpdates: end -endUpdates :.

Voici un lien pour la mise à jour par lots, voir la liste 7-8: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/TableView_iPhone/ManageInsertDeleteRow/ManageInsertDeleteRow.html#//apple_ref/doc/uid/TP40007451-CH10-SW16

L'indice vidéo WWDC est bon aussi. Vous voulez regarder Session 128 - Mastering Table Views.

+0

Will ceci assure la disposition correcte des rangées? Le Guide de programmation pour les vues de table indique que les suppressions se produiront d'abord, puis les insertions. Aussi, malheureusement, j'ai besoin d'utiliser recharger sur les cellules persistantes puisque les noms/commande peuvent changer mais ne devraient pas être traités en utilisant insert/deletes. –

+0

Tout devrait fonctionner, juste envelopper vos appels dans -beginUpdate: et -endUpdate :. Également édité un lien vers la réponse. – Eiko

+1

Le lien vidéo @Eiko est cassé – LuAndre

Questions connexes