2012-10-03 33 views
0

我在调试器中有这样的警告,这是什么意思?关于窗口层次结构的警告

Warning: Attempt to present <RootViewViewController: 0x134ce9c0> on <MovieViewController: 0xa967290> whose view is not in the window hierarchy!

我也使MovieViewController在故事板的初始视图控制器,我也使用ARC。

注意:当我在viewDidLoad的最低部分中间添加两个[super viewDidLoad]; 1时,这并不会出现,这是错误的。

这是我实现MovieViewController的:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.view.backgroundColor = [UIColor whiteColor]; 

    NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"gameopening" ofType:@"m4v"]; 
    self.moviePlayer = [AVPlayer playerWithURL:[NSURL fileURLWithPath:moviePath]]; 
    [self.moviePlayer play]; 

    // Create and configure AVPlayerLayer 
    AVPlayerLayer *moviePlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.moviePlayer]; 
    moviePlayerLayer.bounds = CGRectMake(0, 0, 1024, 768); 
    moviePlayerLayer.position = CGPointMake(515,385); 
    moviePlayerLayer.borderColor = [UIColor clearColor].CGColor; 
    moviePlayerLayer.borderWidth = 3.0; 
    moviePlayerLayer.shadowOffset = CGSizeMake(0, 3); 
    moviePlayerLayer.shadowOpacity = 0.80; 

    // Add perspective transform 

    [self.view.layer addSublayer:moviePlayerLayer];  

    [self performSelector:@selector(loadingView) withObject:nil afterDelay:33.0]; 
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; 
    tapGesture.numberOfTapsRequired = 1; 
    [self.view addGestureRecognizer:tapGesture]; 

} 

- (void)handleTapGesture:(UITapGestureRecognizer *)sender { 

    if (sender.state == UIGestureRecognizerStateEnded) { 
     UIImageView *loadingView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 
     loadingView.image = [UIImage imageNamed:@"Load.png"]; 
     [self.view addSubview:loadingView]; 
     [self performSelector:@selector(mainV) withObject:nil afterDelay:2.0]; 
    } 

} 
-(void)loadingView{ 

     UIImageView *loadingView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 
     loadingView.image = [UIImage imageNamed:@"Load.png"]; 
     [self.view addSubview:loadingView]; 
     [self performSelector:@selector(mainV) withObject:nil afterDelay:2.0]; 

} 
-(void)mainV { 

     moviePlayer = nil; 
     UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
     UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"mainViewController"]; 
     vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
     [self presentViewController:vc animated:YES completion:NULL]; 
} 

帮助,将不胜感激:)

回答

2

当你的ViewController的view加载到内存中的viewDidLoad方法被调用。但到那个时候,view还没有在屏幕上(所以它还没有被添加为的任何其他viewwindow,也就是说它不在视图层次结构中)。

您应等待视图在屏幕上显示您的MovieViewController。 将您的代码改为viewDidAppear:方法,而viewDidLoad,您应该没问题。

+0

谢谢你的有用信息。 :) – Bazinga

+0

哦,等待,仍然产生警告。 :( – Bazinga

+0

当我'handleTapGesture'它产生这个:'警告:尝试呈现演示进行中<!' – Bazinga

0

viewDidLayoutSubviews可用于此目的。它比viewDidAppear更早。

相关问题