J'utilise l'idée GenericTableViewController
de Matt Gallagher pour contrôler mon UITableViews
. Ma source de données est un NSFetchedResultsController
.Comment faire deleteRowsAtIndexPaths: fonctionne avec GenericTableViewController?
http://cocoawithlove.com/2008/12/heterogeneous-cells-in.html
Tout fonctionne très bien, jusqu'à ce que je tente de supprimer une cellule.
Je le code suivant dans mon View Controller:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the managed object.
NSManagedObjectContext *context = [wineryController managedObjectContext];
[context deleteObject:[wineryController objectAtIndexPath:indexPath]];
NSError *error;
if (![context save:&error]) {
// Handle the error.
}
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
La dernière ligne se bloque avec l'explication plutôt bavard dans la console:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (5) must be equal to the number of rows contained in that section before the update (5), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted).'
OK, je comprends ce qu'il dit. .. une ligne n'est pas supprimée (je suppose) parce que je ne redirige pas un message au bon endroit (puisque j'ai déplacé du code de son emplacement "normal") ... quelqu'un a une idée de laquelle? Je suis totalement perplexe sur celui-ci.
+1 Merci beaucoup pour la réponse. –
Vous êtes autorisé à modifier la source de données avant le bloc d'animation. L'erreur que vous avez constatée indique que vous n'avez pas modifié la source de données avant d'animer la suppression. Assurez-vous que la source de données est dans l'état final (après les suppressions) avant d'animer la suppression de ces lignes. – Mark
J'oublie toujours ceci ... pourquoi le code du template XCode n'inclut-il pas ces lignes? – Echelon