2016-09-28 41 views
0

当segue被触发并且代码在prepareForSegue:sender:内执行时,是否有一定的时间限制?执行segue是否有一些时间限制?

我的意思是,假如我在室内,我引发了AVPlayerViewController但这种控制器要求必须下载异步如此,里面prepareForSegue:sender:我有这样的代码的视频:

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

    AVPlayerVC *playerViewController = (AVPlayerVC *)[segue destinationViewController]; 

    [self.onDemandResources loadResourcesWithTags:@[tag] 
            runOnCompletion:^{ 
             NSString *pathBundle = [[NSBundle mainBundle] pathForResource:@"video" ofType:@"mp4"]; 
       NSURL *videoURL = [NSURL fileURLWithPath:pathBundle]; 
       AVPlayer *player = [AVPlayer playerWithURL:videoURL]; 
       playerViewController.player = player; 

       [player play]; 
}]; 
} 

我的问题正在播放[segue destinationViewController],但视频从不播放。我的印象是代码需要很长时间才能执行,并且已经呈现了segue。

任何想法?

回答

2

这是很难给你一个完整和工作的解决方案,因为你只提供prepareForSegue (_ :)功能。我不知道源视图控制器和目标视图控制器的细节。特此我的五美分。

块的问题在于它们经常运行在不同的队列中,因此为segue做好准备会触发块,不会等待块完成,而是继续到下一个视图控制器。

我在你的代码中看到的是,已经赋予新视图控制器控制权的旧视图控制器正在播放你的电影文件。只需让新控制器中的播放器指向旧视图控制器中的同一播放器,就不会在屏幕上显示该电影。您需要一个AVPlayerView才能在屏幕上显示您的电影。

由于我对消息“self.onDemandResources loadResourcesWithTags:@ [tag]”不熟悉,因此我无法通过块评论此消息。然而,而不是说:

AVPlayer *player = [AVPlayer playerWithURL:videoURL]; 
playerViewController.player = player; 

我建议在该块下面的代码:

playerViewController.videoURL = videoURL; 

并运行线路:

AVPlayer *player = [AVPlayer playerWithURL:videoURL]; 

在目标视图控制器“AVPlayerVC * playerViewController”。

希望这会有所帮助。

+0

我做了倒转。我不通过该文件传递URL,而是让目标VC加载播放器并使其播放。我想这是更好的。谢谢! – SpaceDog

0

你应该下载视频触发SEGUE之前,但对于你的问题,我不认为你有时间限制

相关问题