popToRootViewController崩溃

时间:2010-02-15 17:07:03

标签: iphone objective-c memory-management uiviewcontroller uinavigationcontroller

我是一个相对较新的iPhone应用开发者,所以我的知识有点粗略,所以如果这是一个微不足道的问题,请原谅我。

我有一个导航应用程序,可以通过在navigationController对象上调用pushViewController来在表视图之间钻取

我有一个特定的部分,当用户通过界面时,它会按顺序推送新的视图控制器。视图控制器都是UIViewController的子类。

一切正常,直到它结束,其中的想法是用户按下“完成”按钮并返回到根视图控制器(主菜单)。

所以按下按钮我打电话:

[[self navigationController] popToRootViewControllerAnimated:YES];

它崩溃了。

我有点担心这可能是个大问题,因为这肯定会在某些时候起作用但现在总是失败了。

任何人都可以提出任何意见/建议吗?

3 个答案:

答案 0 :(得分:4)

一些建议:

  • 在调用popToRootViewControllerAnimated:之前确认RootViewController确实存在。如果它在沿线某处死亡,调用该方法将导致崩溃。
  • 检查上一个视图的– viewWillDisappear:– viewDidDisappear:方法,确保您没有在那里做一些危险的事情。
  • 不确定弹出视图是否导致它始终解除分配,但检查视图及其控制器的dealloc方法,以确保不会过度释放某些内容。
  • 我见过的一个错误就是从控制器中释放数据模型中的对象。当另一个控制器(在本例中为RootViewController)尝试访问数据模型时,应用程序崩溃。

听起来好像你需要如何使用Xcode调试器。在Xcode中键入调试器有助于获取指针。

答案 1 :(得分:1)

您不应该在viewWillDisappear中使用popToRootViewController。 相反,如果你想按下后退按钮弹出到根控制器,你应该用你自己的后退按钮替换它并向它添加一个动作。尝试做类似::

的事情
UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:@"back"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(goBack:)]; 
self.navigationItem.leftBarButtonItem = back;

然后将操作处理为::

- (void) goBack:(id)sender
{
    // pop to root view controller
    [self.navigationController popToRootViewControllerAnimated:YES];

}

答案 2 :(得分:0)

正如其他人所评论的那样,第一步是运行这是调试模式,找出崩溃的地点和原因。

最常见的崩溃类型是使用解除分配的对象(EXEC_BAD_ACCESS)。你运行静态分析仪了吗?你是否正确地保留了对象参考?