解雇View Controller时出现Exc_bad_access

时间:2013-12-19 17:16:00

标签: ios objective-c exc-bad-access

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

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

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UINavigationController* ctrl = [storyboard instantiateViewControllerWithIdentifier:@"histListID"];
[self presentViewController:ctrl animated:YES completion:nil];

要回到VC1,我使用:

- (IBAction)backPressed:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

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

Thread 1

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

PS:我打开了ARC。

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

    [self deleteItemAt:chosenItem];
    [tableView reloadData];

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

- (void)deleteItemAt:(int)index
{

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

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

2 个答案:

答案 0 :(得分:6)

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

e.g。

[tableView setDelegate:nil];
[tableView setDataSource:nil];

答案 1 :(得分:0)

在我看来,批准的答案并不是很好,因为正如评论中所述,你仍然在控制台中发出警告。 我更喜欢在视图控制器的 dealloc viewDidDisappear:中调用 [self.tableView setEditing:NO animated:NO] 。< / p>