我有一个序列,我需要在课堂外弹出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
时,为什么会崩溃?
答案 0 :(得分:3)
为什么要从超级视图中删除topViewController
的视图?您永远不需要在导航控制器中执行此操作,popToViewController:
会自动执行此操作,并且“导航控制器后面”删除视图可能会导致崩溃。
答案 1 :(得分:1)
我想我知道你打算实现什么目标,但我担心你对如何使用UIViewControllers和UINavigationControllers缺乏基本的了解,这就是为什么我建议先阅读这个:
View Controller Programming Guide for iOS
我相信它会帮助您解决当前的问题以及将来。