为什么我的viewcontroller不在窗口层次结构中?

时间:2013-01-23 18:44:58

标签: uiviewcontroller ios6 xcode4.5 xib uistoryboardsegue

使用故事板,MainMenuViewController以模态方式呈现Number1ViewController:

-(void) goToNumbers {

    [self performSegueWithIdentifier: @"seguetonumbers" sender: self];

}

然后Number1ViewController呈现Number2ViewController,如下所示:

-(void)nextLevel {

     [self performSegueWithIdentifier: @"segueToLevel2" sender: self];
}
然后xCode产生这个警告:

2013-01-23 12:09:49.873 ToddlerTeacherMini[7574:907] Warning: Attempt to present <Number2ViewController: 0x1fddc720> on <Number1ViewController: 0x1fdc7380> whose view is not in the window hierarchy!

我在网上看到有关此警告的Evertything表示您无法在另一个VC的viewDidLoad方法中显示VC并将代码移动到viewWillAppear方法将解决此问题。我没有从viewDidLoad调用这个segue,而是我稍后调用它,所以我不确定为什么会发生这种情况。

我在我的应用程序的其他地方同样提出了VC,没有问题,无法弄清楚这里有什么不同,有什么帮助吗?

要清楚一切似乎在我的应用程序中按预期工作,我只是不想忽略此消息并让它回来后再咬我。


Per Todd Kerpelman的建议我调查了我的nextLevel方法被调用的位置。断点并没有告诉我多少但是在NSLog中进一步挖掘我想出了这个:

-(void)nextLevel {


    if (nextLevelHasNotBeenCalled == 0){

       [self performSegueWithIdentifier: @"segueToLevel2" sender: self];
        NSLog(@"Segue was called here.");

    }

    nextLevelHasNotBeenCalled ++;
    NSLog(@"Next level has been called %i times!", nextLevelHasNotBeenCalled);


}

日志:

2013-01-26 02:04:12.579 ToddlerTeacherMini[9203:907] Segue was called here.
2013-01-26 02:04:12.593 ToddlerTeacherMini[9203:907] Next level has been called 1 times!
2013-01-26 02:04:14.789 ToddlerTeacherMini[9203:907] Next level has been called 2 times!

现在很清楚,nextLevel被调用了两次,这是造成我问题的原因。

1 个答案:

答案 0 :(得分:2)

这听起来像是您的代码在您不期望它时意外调用nextLevel的情况。 (可能是在Number1ViewController的viewDidLoad方法中调用某些不相关方法的副作用。)

您是否尝试在nextLevel方法中添加断点并查看其被调用的方式/位置?这可能是至少确认(或消除)这种可能性的最佳方式。