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

时间:2013-11-28 09:39:29

标签: ios objective-c uiviewcontroller uistoryboardsegue

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

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

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

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

  

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

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

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

为什么呢?请注意,我没有导航控制器。
这里的任何建议都会受到赞赏,segue仍然有效,但我不想要任何我不理解的警告!

1 个答案:

答案 0 :(得分:9)

您应该删除该方法,并且应该在故事板中从按钮到第二个viewController建立连接。

// EXTENDED

如果要将某些内容传递到目标视图,请使用prepareForSegue:sender方法。 每次通过segue更改视图时都会调用此方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"YOURSEGUEIDENTIFIER"])
    {
        YourViewController *yourVC = [segue destinationViewController];
    }
}

// EXTENDED

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

相关问题