删除视图和弹出后,在将nil分配给UIViewController时崩溃

时间:2013-05-24 09:56:22

标签: iphone ios cocoa-touch uiview uiviewcontroller

我有一个序列,我需要在课堂外弹出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时,为什么会崩溃?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

View Controller Programming Guide for iOS

我相信它会帮助您解决当前的问题以及将来。