2010-04-15 11 views
0

J'ai activé le mode d'édition et déplacé des cellules pour permettre aux utilisateurs de positionner le contenu de la vue tabulaire dans l'ordre qu'ils souhaitent. J'utilise Core Data comme source de données, qui trie le contenu par l'attribut "userOrder". Lorsque le contenu est inséré pour la première fois, userOrder est défini sur une valeur aléatoire. L'idée est que lorsque l'utilisateur déplace une cellule, l'utilisateur de cette cellule change pour s'adapter à sa nouvelle position. Les problèmes suivants sont en cours d'exécution je suis en tout en essayant d'y arriver:Déplacement de cellules UITableView et maintien de données cohérentes

  1. sauver avec succès le nouvel emplacement de la cellule et en ajustant tous les endroits ont changé de cellules influencées.

  2. Obtenir des données cohérentes. Par exemple, TableView gère correctement le mouvement, mais lorsque je clique sur le nouvel emplacement de la cellule, il affiche les données de l'ancienne cellule qui était l'emplacement précédent. Les données de toutes les cellules influencées sont aussi corrompues.

Je sais que je dois implémenter dans:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {} 

Je ne sais pas comment. Les docs apple ne sont pas particulièrement utiles si vous utilisez Core Data, comme dans ma situation.

Tout conseil grandement apprécié!

Répondre

0

Problème 1 est à peu près indépendante de l'utilisation CoreData, il suffit de penser d'un simple tableau:

{0 1 2 3 4 A}. 

Maintenant, l'utilisateur déplace un élément fraîchement joint A dans le tableau:

{0 1 A 2 3 4} 

Ainsi, à partir avec l'élément inséré A, qui reçoit l'index 2, tous les éléments doivent avoir leur index (qui est userOrder dans votre cas) incrémenté de un. Donc, vous mappez 0-> 0, 1-> 1, A-> 2, 2-> 3, 3-> 4 et ainsi de suite.

Problème 2 peut avoir deux ou trois sources:

  1. Soit vos valeurs CoreData ne sont pas synchronisées de sorte que la base de données ne sont pas en phase avec ce que vous voyez.
  2. [Table reloadData] n'a pas été appelé
  3. Votre mouvement-algorithme est erroné

vous pouvez donc peut-être vérifier les points de Thee ci-dessus et si aucune vous applique pourrait envisager d'afficher votre déménagement algorithme pour un examen plus approfondi.

Questions connexes