2016-09-28 24 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之前,但對於你的問題,我不認爲你有時間限制

相關問題