gpt4 book ai didi

uiviewcontroller - 为什么我的 View Controller 不在窗口层次结构中?

转载 作者:行者123 更新时间:2023-12-04 08:36:31 25 4
gpt4 key购买 nike

使用 Storyboard,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 被调用了两次,这就是导致我出现问题的原因。

最佳答案

这听起来像是您的代码意外调用了 nextLevel,而您并没有预料到它会调用。 (可能是在您的 Number1ViewController 的 viewDidLoad 方法中调用了一些不相关的方法的副作用。)

您是否尝试过向您的 nextLevel 方法添加一个断点并查看它是如何/在何处被调用的?这可能是至少确认(或消除)这种可能性的最佳方式。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com