iPhone:删除UITableView行时崩溃

时间:2010-04-06 10:54:05

标签: iphone objective-c uitableview

我是iPhone开发的新手。我正在开发一个从数据库中获取值并在表视图中显示它的应用程序。我想逐个删除表行,但行不会删除,应用程序崩溃。

这是我的行删除代码:

- (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];
}

我还使用此操作删除所有行:

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

如何在UITableView中正确实现删除?

2 个答案:

答案 0 :(得分:0)

您需要更改:

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

只是:

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

您正在崩溃,因为您正在更改数据模型以删除行,然后重新加载表,使行不再存在,然后告诉表删除不存在的行。

您不必在此实例中调用重新加载数据,因为该表已经在视觉上改变了自己。当数据模型中的更改强制表中的更改而不是表本身更改数据模型时,您只需调用reload

答案 1 :(得分:0)

尝试在beginUpdates和endUpdates中包含对deleteRows的调用:

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

我假设deleteCoffee会影响表的填充方式。这必须介于更新包装器之间。

或者您可以在没有其他调用的情况下使用reloadData:

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