有一段时间我很难找到解决方案,我搜索了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有关吗?解雇控制器时,我做错了吗?
如果您需要更多代码请问,我真的需要解决它。
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];
}
很抱歉,如果它没有正确执行我没有编写代码的那部分,但我不认为它与删除单元格有关。
答案 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>