2013-11-28 38 views
11

我知道还有很多其他问题,但他们并没有完全解释我的问题。警告:尝试呈现其视图不在窗口层次结构中!当使用确定的赛格

我通过一个确定的故事板定制SEGUE,当相关的按钮被按下,从我最初的视图控制器SAGViewController去另一个SAGHomeScreenViewController

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

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

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

如果我注释掉performSegueWithIndentifer,该SEGUE仍然工作,但我没有得到警告:

为什么?请注意,我没有导航控制器。
任何意见在这里将不胜感激,segue仍然有效,但我不希望任何警告,我不明白!

+0

如果你不使用UINavigationController,那么你应该使用模态segue。塞格的工作原理是因为如果我没有错,你已经在从你的uibutton对象的故事板中将segue连接到nextviewcontroller。 – suhit

+0

我使用自定义的segue,因为我想让目标视图从右侧滑入。如果我切换到模态段,我仍然会收到警告 – AndyOS

+0

如何将您当前的viewControllert(您称为goNewGame的控制器)添加到视图层次结构中? – Greg

回答

8

你应该删除该方法,你应该在你的故事板从按钮连接到第二个viewController。

//扩展

如果你想的东西传递给您的目标视图使用prepareForSegue:发件人方法。 这种方法被称为每次通过赛格瑞更改视图时间:

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

//扩展

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

+1

感谢您的时间。如果我需要使用performSegueWithIdentifier方法,例如将某物传递给目标视图?我知道还有其他方法可以传递信息,但为什么执行SegueWithIdentifier会导致警告? – AndyOS

+0

请参阅上面编辑的帖子。 – Greg

+0

无论如何,我已经准备好了论述,如果我使用performSegueWIthIdentifier – AndyOS

相关问题