40

我有一个带有 a 的 viewController UITableView,我允许通过滑动编辑(删除)其中的行 - 就像在邮件应用程序中一样。我用这种方法来做这件事:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

    return YES;
}

但是,如果我有一个删除按钮,同时我使用我的后退导航UINavigationController,即当我popViewControllerAnimated:,应用程序崩溃并显示以下消息:

[ViewController tableView:canEditRowAtIndexPath:]: 消息发送到释放的实例 0xaae64d0

我该如何解决这个问题?

4

4 回答 4

75

在视图控制器的dealloc方法中,将表格视图的editing属性设置为NO.

于 2013-10-08T08:41:38.613 回答
42

我有同样的问题,但我使用的是 ARC,我不想在 dealloc 方法中胡闹。在 viewWillDisappear 中执行此操作足以阻止崩溃。

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [table setEditing:NO];
}
于 2013-10-08T16:14:45.050 回答
0
  1. 利用

    tableview.delegate = nil in dealloc()

  2. 利用

    表视图=无

于 2016-12-15T00:52:41.030 回答
0

我知道这是一篇旧帖子,但我最近遇到了这个问题,并认为其他人可能会从我的发现中受益:我正在使用 Xcode 9 和 iOS 11,并且我正在采用使用 SearchController 的新方法。如果我在搜索时单击系统后退按钮,我会在 tableView(_: canEditRowAt indexPath:) 上遇到致命错误。将 setEditing 更改为 false 并没有解决我的问题。问题是我在 canEditRowAt 覆盖中返回真/假,具体取决于我的数据源是否有记录,但是当我搜索时,我有一个不同的数据源(过滤数组)。一旦我检查了正确的数据源,后退按钮就起作用了。

于 2018-02-19T23:06:31.020 回答