我是一个相对较新的iPhone应用开发者,所以我的知识有点粗略,所以如果这是一个微不足道的问题,请原谅我。
我有一个导航应用程序,可以通过在navigationController对象上调用pushViewController来在表视图之间钻取
我有一个特定的部分,当用户通过界面时,它会按顺序推送新的视图控制器。视图控制器都是UIViewController的子类。
一切正常,直到它结束,其中的想法是用户按下“完成”按钮并返回到根视图控制器(主菜单)。
所以按下按钮我打电话:
[[self navigationController] popToRootViewControllerAnimated:YES];
它崩溃了。
我有点担心这可能是个大问题,因为这肯定会在某些时候起作用但现在总是失败了。
任何人都可以提出任何意见/建议吗?
答案 0 :(得分:4)
一些建议:
popToRootViewControllerAnimated:
之前确认RootViewController确实存在。如果它在沿线某处死亡,调用该方法将导致崩溃。 – viewWillDisappear:
和– viewDidDisappear:
方法,确保您没有在那里做一些危险的事情。 听起来好像你需要如何使用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)。你运行静态分析仪了吗?你是否正确地保留了对象参考?