2010-04-06 8 views
1

Je suis nouveau dans le développement de l'iPhone. Je développe une application qui extrait une valeur d'une base de données et l'affiche dans une vue de table. Je souhaite supprimer les lignes de table une par une, mais les lignes ne sont pas supprimées et l'application se bloque.iPhone: Crash lors de la suppression des lignes UITableView

Voici ma ligne de code de suppression:

- (void)tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
            forRowAtIndexPath:(NSIndexPath *)indexPath 
{  
if(editingStyle == UITableViewCellEditingStyleDelete) { 
    SanjeevKapoorAppDelegate *appDelegate =(SanjeevKapoorAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    list *animal =[appDelegate.list1 objectAtIndex:indexPath.row]; 
    [appDelegate deleteCoffee];  
    [self.tableView reloadData]; 
    //Delete the object from the table. 
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
} 

je supprime également toutes les lignes avec cette action:

-(IBAction)deletebtn:(id)sender{ 
    SanjeevKapoorAppDelegate *appDelegate =(SanjeevKapoorAppDelegate *)[[UIApplication sharedApplication] delegate]; 
     [appDelegate deleteCoffee]; 
     [self.tableView reloadData]; 
} 

Comment puis-je mettre correctement supprimer dans un UITableView?

Répondre

0

Vous devez changer:

[self.tableView reloadData]; 
//Delete the object from the table. 
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

juste:

[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

Vous s'écraser parce que vous changez votre modèle de données pour supprimer la ligne, puis rechargeant la table telle que la ligne n'existe plus alors disant à la table de supprimer la ligne inexistante.

Vous n'avez pas besoin d'appeler des données de rechargement dans cette instance car la table s'est déjà modifiée visuellement. Vous n'appelez que reload lorsqu'une modification du modèle de données impose une modification de la table et non lorsqu'une table modifie elle-même le modèle de données.

0

Essayez d'envelopper l'appel à DeleteRows dans beginUpdates et endUpdates:

[self.tableView beginUpdates]; 
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
[appDelegate deleteCoffee];  
[self.tableView endUpdates]; 

Je suppose deleteCoffee affecte la façon dont la table est remplie. Cela doit aller entre les wrappers de mise à jour.

Ou vous pouvez utiliser reloadData sans les autres appels:

[appDelegate deleteCoffee];  
[self.tableView reloadData]; 
Questions connexes