使用情节提要,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!


我在网上看到的有关此警告的所有内容均表明,您无法在另一个VC的viewDidLoad方法中显示VC,并将代码移至viewWillAppear方法将解决此问题。我不是从viewDidLoad调用此segue,而是稍后再调用,所以我不确定为什么会这样。

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

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



根据Todd Kerpelman的建议,我研究了nextLevel方法的调用位置。 Breakpoint并没有告诉我太多,但是我进一步使用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被调用两次,这是导致我的问题的原因。

最佳答案

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

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

关于uiviewcontroller - 为什么我的viewcontroller不在窗口层次结构中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14487039/

10-10 14:47