2012-01-07 9 views
5

J'ai un UITableView et un planificateur s'exécutant en arrière-plan pour supprimer des enregistrements de l'objet de données sous-jacent. Chaque fois qu'un objet est supprimé, l'affichage de la table doit être mis à jour en conséquence.Impossible de faire fonctionner deleteRowsAtIndexPaths

Mais je continue d'obtenir ce message d'erreur ennuyeux lorsque vous essayez de supprimer une ligne de la vue de la table.

* Mettre fin application en raison d'une exception non interceptée NSInternalInconsistencyException, motif:. « Chemin d'index non valide pour une utilisation avec UITableView chemins Index passé à la vue de la table doit contenir exactement deux indices spécifiant la section et la ligne S'il vous plaît utiliser la catégorie sur NSIndexPath dans. UITableView.h si possible. "

Le code:

NSIndexPath *indexPath = [NSIndexPath indexPathWithIndex:0]; 
NSUInteger row = [indexPath row]; 

NSMutableArray* files = [[NSMutableArray alloc] initWithArray:fileNames]; 
[files removeObjectAtIndex:[indexPath row]]; 
[fileNames dealloc]; 
fileNames = [NSArray arrayWithArray:files]; 

//[self.fileNames removeObjectAtIndex:row]; 
[self.tableDraft deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
withRowAnimation:UITableViewRowAnimationFade]; 

PS: J'ai aussi essayé [tableView reloadData]; mais a des effets secondaires indésirables, effaçant l'index sélectionné.

Répondre

21

Avez-vous envisagé de suivre le conseil du message? Votre chemin d'index ne contient pas à la fois une ligne et un composant de section. Utilisez +[NSIndexPath indexPathForRow:inSection:] pour créer l'objet de chemin d'index, de sorte qu'il a l'information la vue du tableau nécessite:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
+4

+1 Je suis d'accord ... il faut plus de temps pour poster tout cela sur le SO qu'il fait pour lire l'erreur ... il vous indique précisément ce qu'il faut faire et pourquoi ça avorte ... –

+0

Merci im encore d'apprendre – DevNull

2

Vous devez utiliser:

NSIndexPath * indexPath = [NSIndexPath indexPathForRow: rowIndex lasection : sectionIndex];

0

Utilisez comme cette

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag-1 inSection:0]; 

CGRect rectOfCellInTableView = [objTableView rectForRowAtIndexPath:indexPath]; 

CGRect rectOfCellInSuperview = [objTableView convertRect:rectOfCellInTableView toView:[objTableView superview]]; 
Questions connexes