2010-06-14 7 views
1

J'ai un tableView avec plusieurs sections. Lorsqu'une section contient une seule ligne, et si je tente de supprimer cette ligne, mes application se bloque lors de l'exécution de ce code:UITableView avec plusieurs sections: section avec 1 ligne, la suppression de la ligne bloque l'application

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; 

Je reçois cette exception:

*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)' 

Il y a un tableau pour chaque section. Chacun de ces tableaux contient des objets à afficher dans les lignes. Ensuite, il y a un autre tableau qui contient ces tableaux.

Une idée de ce que je fais mal? Merci.

modifier:

OK, je viens de voir dans le débogueur que c'est la méthode tableView: titleForHeaderInSection qui plantait, parce que je recevais le titre de la section dans le tableau que je viens de supprimer .. Donc, je tentais d'accès un tableau avec 0 objet à l'intérieur ...

Répondre

0

La vue de table possède une source et la source contient la liste des sections et des lignes affichées. Lorsque vous effectuez l'appel [tableView deleteRowsAtIndexPaths:withRowAnimation:], la vue de table va mettre à jour la table, mais la source est maintenant désynchronisée (elle contient la ligne que vous venez de supprimer). La solution consiste à mettre à jour la source (que ce soit un tableau ou des données de base ou autre) juste avant de mettre à jour la vue de la table elle-même.

0

L'explication la plus simple est que indexPath est nul ce qui provoque un tableau vide à passer à la méthode de suppression.

Consignez la valeur de indexPath pour confirmer.

+0

Pour: \t \t printf ("section:% d, ligne:% d \ n", indexPath.section, indexPath.row); Voici le journal: section : 1, ligne: 0. donc pas indexPath n'est pas nul ... – leochab

+0

probablement chercher ailleurs dans le code alors. Je ne vois pas de problème avec ce que vous avez posté en ce moment. – TechZen

0

Lorsque vous avez une seule ligne dans la section, vous devez supprimer cette section. Voici le code suivant pour supprimer la section. [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop];

Questions connexes