警告:尝试显示不在窗口层次结构中的视图!使用已识别的 segue 时

Posted

技术标签:

【中文标题】警告:尝试显示不在窗口层次结构中的视图!使用已识别的 segue 时【英文标题】:Warning: Attempt to present whose view is not in the window hierarchy! When using identified segue 【发布时间】:2013-11-28 09:39:29 【问题描述】:

我知道还有很多其他问题与此相关,但它们并没有完全解释我的问题。

我从最初的视图控制器 SAGViewController 转到另一个 SAGHomeScreenViewController 当按下相关按钮时,通过已识别的故事板自定义 segue:

-(IBAction)goNewGame
    [self performSegueWithIdentifier:@"startHomeSegue" sender:self];

它工作正常,但我仍然收到警告:

警告:尝试在 SAGViewController: 0xbaaa9f0 上呈现 SAGHomeScreenViewController: 0xc43b800,其视图不在窗口层次结构中!

如果我注释掉 performSegueWithIndentifer,segue 仍然有效,但我没有收到警告:

-(IBAction)goNewGame
    //[self performSegueWithIdentifier:@"startHomeSegue" sender:self];

为什么?请注意,我没有导航控制器。 如有任何建议,我们将不胜感激,segue 仍然有效,但我不想要任何我不理解的警告!

【问题讨论】:

如果你不使用 UINavigationController 那么你应该使用模态segue。 Segue 之所以有效,是因为如果我没记错的话,您在情节提要中将 segue 从您的 uibutton 对象连接到 nextviewcontroller。 我正在使用自定义 segue,因为我希望目标视图从右侧滑入。如果我切换到模态序列,我仍然会收到警告 如何将当前的 viewControllert(调用 goNewGame 的控制器)添加到视图层次结构中? 我没有,这是我的初始视图控制器 - 在情节提要中,我已将其标记为是初始视图控制器。我还应该做其他事情吗?如果我使用 performSegueWithIdentifier,我只会收到警告。 从哪里调用 goNewGame 方法?是否在取消按钮点击时被调用? 【参考方案1】:

您应该删除该方法,并且应该在情节提要中建立从按钮到第二个 viewController 的连接。

//扩展

如果你想向目标视图传递一些东西,你可以使用 prepareForSegue:sender 方法。 每次通过 segue 更改视图时都会调用此方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([[segue identifier] isEqualToString:@"YOURSEGUEIDENTIFIER"])
    
        YourViewController *yourVC = [segue destinationViewController];
    

//扩展

发生这种情况是因为您以两种方式连接您的 segue,一种在代码中,另一种在情节提要中。您必须删除其中之一。您可以从您的代码中删除您的 IBAction(这样您将在情节提要中只有连接),或者您可以在情节提要中删除您的连接(从您的按钮到目标视图控制器)并再次添加它,但这次将其从源视图控制器中拖动(不是按钮)到您的目标视图控制器。不要忘记设置 segue 标识符。如果您使用情节提要,我建议您从代码中删除您的 IBAction,从而减少要管理的代码。 希望对您有所帮助。

【讨论】:

感谢您的宝贵时间。如果我需要使用 performSegueWithIdentifier 方法怎么办?将某些东西传递给目标视图?我知道还有其他方法可以传递信息,但为什么 performSegueWithIdentifier 会导致警告? 无论如何我都有 prepareForSegue,如果我使用 performSegueWIthIdentifier 仍然会收到警告

以上是关于警告:尝试显示不在窗口层次结构中的视图!使用已识别的 segue 时的主要内容,如果未能解决你的问题,请参考以下文章

警告:尝试显示不在窗口层次结构中的视图!迅速

尝试显示其视图不在窗口层次结构警报中

警告:尝试在视图不在窗口层次结构中的 <App name:> 上显示 <UIAlertController:>

警告:尝试在其视图不在窗口层次结构中的 * 上呈现 * - swift

警告:尝试呈现不在窗口层次结构中的视图!在 UISearchController

警告:尝试在视图不在窗口层次结构中的 **.ViewController 上呈现 ZMNavigationController