代码之家  ›  专栏  ›  技术社区  ›  Chris James

PopTorootView控制器崩溃

  •  2
  • Chris James  · 技术社区  · 15 年前

    我是一个相对较新的iPhone应用程序开发人员,所以我的知识有点粗略,所以如果这是一个小问题,请原谅我。

    我有一个导航应用程序,它通过在navigationcontroller对象上调用pushviewcontroller在表视图之间进行钻取。

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

    一切都很好,直到最后,在那里的想法是用户按下“完成”按钮,并返回到根视图控制器(主菜单)。

    所以按下按钮我会打电话给:

    [[self navigationController] popToRootViewControllerAnimated:YES];
    

    然后它就崩溃了。

    我有点担心这可能是个大问题,因为这确实有效。 在某一时刻 但现在总是失败。

    有人能提出任何意见/建议吗?

    3 回复  |  直到 12 年前
        1
  •  4
  •   TechZen    15 年前

    一些建议:

    • 打电话之前 popToRootViewControllerAnimated: 确认rootviewcontroller确实存在。如果它在线路的某个地方死掉,调用该方法将导致崩溃。
    • 检查 – viewWillDisappear: – viewDidDisappear: 最后一种方法,确保你没有在那里做危险的事情。
    • 不确定弹出一个视图是否会导致它总是取消分配,但请检查视图及其控制器的DealLoc方法,以确保不会过度释放某些内容。
    • 我经常看到的一个错误是从控制器中释放数据模型中的对象。当另一个控制器(在本例中是rootviewcontroller)试图访问数据模型时,应用程序崩溃。

    听起来您需要如何使用Xcode调试器。在xcode帮助中键入debugger以获取指针。

        2
  •  1
  •   Dhruv Goel    12 年前

    您不应该在视图中使用PopTorootView控制器将消失。 相反,如果您想在按下后退按钮时弹出到根控制器,您应该用自己的按钮替换后退按钮,并向它添加一个操作。尝试这样做:

    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];
    
    }
    
        3
  •  0
  •   gerry3    15 年前

    正如其他人所评论的,第一步是运行调试模式,并找出崩溃的位置和原因。

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