解雇View Controller时执行exec_bad_access

Lor*_*olo 2 exc-bad-access objective-c ios

有一段时间我很难找到解决方案,我搜索了谷歌,stackoverflow但无法解决这个问题.

我有2个视图控制器(我们称之为VC1和VC2),我可以在它们之间进行切换,没有任何问题.为了呈现VC2,我使用:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UINavigationController* ctrl = [storyboard instantiateViewControllerWithIdentifier:@"histListID"];
[self presentViewController:ctrl animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

要回到VC1,我使用:

- (IBAction)backPressed:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

VC2包含一个表视图,在我删除一些单元格后,如果我尝试返回VC1,我得到EXC_BAD_ACCESS(代码= 1).我以前从来没有处理过这个问题,我知道它可能与我代码中的某些地方有关.但我真的不知道如何解释它.它与我的tableView有关吗?在解雇控制器时我做错了什么?

线程1

如果您需要更多代码,请询问,我真的需要解决它.

PS:我打开了ARC.

编辑:用于删除单元格的代码

    [self deleteItemAt:chosenItem];
    [tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

基本上deleteItemAt所做的是从数组中删除一些对象:

- (void)deleteItemAt:(int)index
{

    [self.histModel deleteFileAtIndex:index];
    if ([self isWeekSelected]) {
        [self updateWeekDic];
    }else{
        [self updateMonthDic];
    }
    [callout dismissAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

很抱歉,如果它没有正确执行我没有编写代码的那部分,但我不认为它与删除单元格有关.

Sim*_*lin 6

每当您解除viewController时,请确保将所有委托设置为nil.堆栈跟踪显示正在释放的大量对象,然后是tableview委托回调.我怀疑这是因为它试图调用[delegate canEditCellAtRowindex]但是viewController已被解雇并且不再在堆栈中.

例如

[tableView setDelegate:nil];
[tableView setDataSource:nil];
Run Code Online (Sandbox Code Playgroud)