1

我有一个序列,我需要UIViewcontroller从课堂外弹出一个。从服务器我会得到一个注销事件,如果视图控制器是打开的,我需要弹出它。所以我这样做是为了找到顶视图控制器并弹出它:

UIViewController *top_view_ctrlr = [self.navigationController topViewController];
if (top_view_ctrlr.view != nil) {
    [top_view_ctrlr.view removeFromSuperview];
}

// Popping only the top view controller.
[top_view_ctrlr.navigationController popToViewController:dash animated:NO];

然后我设置nil所有创建的视图控制器,例如:

if (history != nil) {
    history = nil; // Here history is an view controller. Because it is not on top, I am setting only nil here to release all its memory. 
}

当我使用 ARC 时,我想我不需要太担心历史中的内存释放。但是,它崩溃了:

[history_class tableView:cellForRowAtIndexPath:]: 发送到已释放实例的消息。

可能是什么问题呢?为什么当我将对象设置为时它会崩溃nil

4

2 回答 2

3

为什么topViewController要从其超级视图中删除 ' 视图?您永远不需要在导航控制器中popToViewController:执行此操作,自动执行此操作,并且删除“导航控制器背后”的视图可能会导致崩溃。

于 2013-05-24T10:01:53.227 回答
1

我想我知道你打算实现什么,但我担心你对如何使用 UIViewControllers 和 UINavigationControllers 缺乏一些基本的了解,这就是为什么我建议先阅读这篇文章:

查看 iOS 控制器编程指南

我相信它会帮助您解决当前和未来的问题。

于 2013-05-24T10:15:58.040 回答