如何处理“在意外状态下完成导航过渡。导航栏子视图树可能已损坏。”

时间:2011-03-24 21:27:56

标签: iphone ios-simulator titanium appcelerator appcelerator-mobile

我正在使用Appcelerator Titanium Mobile编写iPhone应用程序。我隐藏并根据焦点窗口显示选项卡组。

dashWin.addEventListener("focus",function(e) {
    if (dashWin.tabGroupVisible == true) {
        dashWin.tabGroupVisible=false;
        tabGroup.animate({bottom:-50,duration:500});
    }
});

当dashWin收到焦点事件时,上面的代码会隐藏选项卡组。但是,当在iPhone模拟器中运行时事件触发时,我在Titanium控制台中看到此消息:

  

在意外状态下完成导航转换。导航栏子视图树可能已损坏。

Google搜索结果显示了一个结果:Another StackOverflow question可能会暗示发生了什么。

4 个答案:

答案 0 :(得分:3)

我通过故事板将Action SegueSelection Segue从一个视图链接到另一个视图并再次以编程方式执行相同的segue时出现此错误,这使导航控制器执行两次相同的segue。

此案例的2个解决方案:

  1. 删除推送视图的代码。让故事板为您执行segue。这对大多数情况都有好处。
  2. Action Segue替换Selection SegueManual Section并自行执行- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender。当您想根据发件人自定义segue的行为时,您可能会发现此解决方案很有用。

答案 1 :(得分:2)

通常,标签组充当应用导航的根。当用户点击选项卡时,该选项卡的窗口将被聚焦。

接下来,当用户触发需要出现新窗口的操作时,它通常以模态或顶部(在导航堆栈的意义上)显示在当前窗口中。在后一种情况下,告诉当前选项卡打开新窗口。

如果将tabBarHidden属性设置为false(创建新窗口时),当前选项卡打开新窗口时,将隐藏标签栏。

这种更标准的方法对您有用吗?

答案 2 :(得分:0)

我有segues导致我的主导航控制器导致这种情况。我通过将主导航控制器设置回堆栈顶部来解决问题。这是代码:

- (void) viewDidAppear:(BOOL)animated
{
    [self.navigationController popToRootViewControllerAnimated:NO];
}

答案 3 :(得分:0)

最近,我遇到了同样的问题。原因是: - 我试图错误地弹出两次视图控制器。 您可以通过在推送和弹出视图控制器上设置断点来检查此崩溃