单击按钮删除后TableView删除

Posted

技术标签:

【中文标题】单击按钮删除后TableView删除【英文标题】:TableView delete after I click button delete 【发布时间】:2013-02-21 19:36:12 【问题描述】:

所以我想删除表格视图中的行。

这是我的代码:

- (IBAction)done:(UIStoryboardSegue *)segue

    DetailGodsViewController *detailController = [segue sourceViewController];  
    NSIndexPath *path = [NSIndexPath indexPathForRow:detailController.row inSection:detailController.section];
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path]
                     withRowAnimation:NO];
    [self.listOfGoods deleteGood: detailController.row];
    [[self tableView] reloadData];
    [self dismissViewControllerAnimated:YES completion:NULL];

我在storyBoard中有ControlViewTable,当我点击ControlViewTable中的一行后,它会跳转到Detail view 还有其他信息,我也在这个函数中存储了关于行和部分的信息:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([[segue identifier] isEqualToString:@"ShowGoodDetails"]) 
    DetailGodsViewController *detailViewController = [segue destinationViewController];

    detailViewController.row = [self.tableView indexPathForSelectedRow].row;
    detailViewController.section = [self.tableView indexPathForSelectedRow].section;
    detailViewController.good = [self.listOfGoods getGoodAtIndex:detailViewController.row ];

还有一个detail view的按钮可以删除,点击后跳转到功能:

- (IBAction)done:(UIStoryboardSegue *)segue.

但它总是在 deleteRows 中崩溃。有人可以帮忙吗?

【问题讨论】:

您能否添加崩溃的原因和确切的行号,或者更好的是完整的堆栈跟踪? 当我尝试删除行时它崩溃 -> [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path] withRowAnimation:NO]; 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新(2)后现有节中包含的行数必须相等更新前该节中包含的行数 (2),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该节的行数部分(0 移入,0 移出)。' 【参考方案1】:

一个问题可能是您在尝试删除包含该按钮的单元格时仍在响应该按钮。您需要让该操作方法结束,然后然后调用 deleteRows。你可能应该做我在这里推荐的那种事情:

https://***.com/a/13907375/341994

然而,最大的问题可能是你必须在删除表的一行之前更新模型数据。

【讨论】:

我不明白在哪里可以将您推荐的代码放在***.com/a/13907375/341994 中并更新模型数据我该怎么做?【参考方案2】:

您在done: 方法中的代码正在做一些无序的事情以及一些您不需要的额外事情。应该是:

- (IBAction)done:(UIStoryboardSegue *)segue

    DetailGodsViewController *detailController = [segue sourceViewController];  
    NSIndexPath *path = [NSIndexPath indexPathForRow:detailController.row inSection:detailController.section];
    [self.listOfGoods deleteGood: detailController.row];
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path]
                     withRowAnimation:NO];
    [self dismissViewControllerAnimated:YES completion:NULL];

基本上,您需要先更新数据,然后再更新表格。另外,在调用deleteRowsAtIndexPaths: 之后不要在桌子上调用reloadData。做一个或另一个,而不是两个。

【讨论】:

现在它不会崩溃,但它会删除奇怪表中的所有数据:( 2013-02-21 21:55:31.793 AppGods[4362:c07] 对 的开始/结束外观转换的不平衡调用。

以上是关于单击按钮删除后TableView删除的主要内容,如果未能解决你的问题,请参考以下文章

删除单元格后刷新tableView

如何通过单击单元格中的按钮来删除 tableView 中的单元格?使用核心数据

删除 tableview 单元格并刷新视图控制器后刷新 tableview

获取 UITableViewCell 索引以响应位于 tableview 中的 tableview 中的按钮单击的正确方法?

如何在swift 3中删除tableview中特定单元格的按钮

在单元格中单击时,tableView:indexPathForCell 返回 nil