0

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

这是我的代码:

- (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中的一行后,它会跳转到详细信息视图还有其他信息,我也在此函数中存储有关行和部分的信息:

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

在详细视图中还有一个按钮用于删除,点击后跳转到功能:

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

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

4

2 回答 2

1

您在该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];
}

基本上,您需要在更新表之前更新数据。另外,打电话后不要reloadData在桌子上打电话deleteRowsAtIndexPaths:。做一个或另一个,而不是两个。

于 2013-02-21T19:58:01.767 回答
1

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

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

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

于 2013-02-21T19:54:03.397 回答