我是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中正确实现删除?
答案 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];