2013-01-23 56 views
3

用故事板,MainMenuViewController呈现Number1ViewController模态与此:为什么我的viewcontroller不在窗口层次结构中?

-(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 od并将你的代码移动到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获取调用两次,是什么原因造成我的问题。

回答

2

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

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

+0

根据您的建议添加了断点。 nextLevel如预期的那样被调用,而不是之前。 – DelightedD0D

+0

确保我从viewDidLoad中取出了所有内容并将其移至viewWill出现,无需更改。这是莫名其妙 – DelightedD0D

+0

你钉了它的男人。感谢您指点我正确的方向。我本人一直在寻找相当长的一段时间。现在我有一个简洁的方法来测试未来这些类型的问题。 – DelightedD0D

相关问题