使用故事板,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 方法的位置。断点并没有告诉我太多,但是用 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 被调用了两次,这就是导致我的问题的原因。