2

J'ai un UITableView affichant un NSFetchedResultsController sous-jacent.Décalage d'affichage lors de l'ajout de lignes à UITableView

Lorsque le fetchedResultsController est mis à jour,

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { 

est appelé. Et le suivant est exécuté:

case NSFetchedResultsChangeInsert: 
    [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:shiftedIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    break; 

Le cellForRowAtIndexPath est seulement appelé à la nouvelle ligne (ce qui est logique)

Le problème est cependant que toutes les valeurs affichées dans les lignes de la vue de la table sont décalées vers le bas . La première rangée affiche son titre. Les deuxièmes lignes affichent le titre de la première rangée. Si je répète cela, la troisième rangée affichera le titre de la deuxième rangée, le quatrième le titre de la troisième rangée, etc.

Je ne comprends pas ce qui peut arriver, surtout parce que cellForRowAtIndexPath est seulement appelé pour la nouvelle ligne (ce qui est logique) et non pour toutes ces lignes. En outre, si je clique sur ces lignes qui ont le mauvais titre, il ouvre le bon document (didSelectRowAtIndexPath fonctionne correctement avec l'indexPath)

Une idée de ce qui pourrait arriver? Merci!

+0

je peux résoudre le problème en mettant un droit [tableView reloadData] après the [tableView insertRowsAtIndexPaths] mais je ne pense pas que ce soit la bonne façon de procéder. – Kamchatka

Répondre

0

Quel est le code qui provoque l'appel des méthodes déléguées? Veuillez modifier votre réponse et ajouter ce code afin que nous puissions voir le cycle de vie complet de cet événement.

0

Ill dire, si votre changement a besoin de mettre un impact sur toutes les lignes disponibles dans TableView, que vous vraiment besoin d'appeler [tableView reloadData]

+0

Non, ma modification insère simplement une nouvelle ligne dans le modèle de données de base. – Kamchatka