所以我试图删除表视图中的行。
这是我的代码:
- (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视图并且还有其他信息,我也存储了关于此函数中行和部分的信息:
- (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中崩溃。有人可以帮忙吗?
答案 0 :(得分:1)
一个问题可能是,当您试图摆脱包含按钮的单元格时,您仍然在响应按钮。您需要让该操作方法结束,然后调用deleteRows。你应该做我推荐的那种事情:
https://stackoverflow.com/a/13907375/341994
但是,最大的问题可能是您必须在删除表格的一行之前更新模型数据。
答案 1 :(得分: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:
。做其中一个,而不是两个。