UINavigationController'损坏的导航栏'问题

时间:2013-10-22 13:10:12

标签: ios objective-c xcode cocoa-touch interface-builder

我遇到严重的问题让我的导航控制器工作,并在本网站上尝试了几乎所有相关的问题。

我的问题是,当我以编程方式执行segue时,导航栏中似乎存在转换,但视图不会更改。我改为看到以下错误:

2013-10-22 13:47:30.059 App[2236:a0b] nested push animation can result in corrupted navigation bar
2013-10-22 13:47:30.411 App[2236:a0b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2013-10-22 13:47:30.501 App[2236:a0b] Unbalanced calls to begin/end appearance transitions for 

我的故事板看起来像这样:

enter image description here

在LoginViewController中,我们根据某些条件执行segue:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear];
    NSString* appState = [AppConfig getAppState];
    if ([appState isEqualToString:APP_STATE_WAITING]) {
        [self performSegueWithIdentifier:@"Load" sender:self];
    }
    else if ([appState isEqualToString:APP_STATE_REGISTRATION_AVAILABLE]) {
        [self performSegueWithIdentifier:@"SignUp" sender:self];
    }
}

在LoadingViewController中,我们等待来自Web服务的响应:

- (void)segueToWaitingList:(NSUInteger)behind inFront:(NSUInteger)inFront
{
    [MosaycOptions setAppState:APP_STATE_WAITING];
    dispatch_async(dispatch_get_main_queue(), ^{
         [self performSegueWithIdentifier:@"Waiting" sender:self];
    });
}

正是segue给了我这个问题。导航栏转换但视图没有,我们看到打印出以下错误:

2013-10-22 13:47:30.059 App[2236:a0b] nested push animation can result in corrupted navigation bar
2013-10-22 13:47:30.411 App[2236:a0b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2013-10-22 13:47:30.501 App[2236:a0b] Unbalanced calls to begin/end appearance transitions for 

应用程序不会崩溃,但不会发生segue,它不会转换到等待列表视图,而只是继续加载并将错误打印到控制台。当我按回而不是回到登录屏幕时,我得到以下空白屏幕:

enter image description here

如果我再次按下它会因此错误崩溃:http://pastebin.com/7mCyeQv9

有些事情显然已经搞砸了导航堆栈,但是我已经使用调试器进行了检查,它看起来非常好,一切都按正常方式推送。我不能为我的生活弄清楚。这只是我之前使用的标准导航控制器设置。

有什么想法吗?

2 个答案:

答案 0 :(得分:10)

我终于找到了问题。

在加载ViewController上调用performSegueWithIdentifier之前调用了{p> viewDidAppear。基本上是同步错误。

答案 1 :(得分:3)

您不应在 viewDidLoad 中执行segue。 尝试在 viewDidApperar:

中执行

Apple documentation

  

以编程方式显示视图控制器的内容   ...   从另一个可见的视图控制器呈现它。   ...