2016-09-28 6 views
0

セグがトリガーされ、コードが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]が提示されていますが、ビデオは決して再生されません。私が持っている印象は、コードが実行に時間がかかり、セグがすでに提示されているということです。

アイデア?

答えて

2

あなただけprepareForSegueを提供するので、あなたの完全なワーキング溶液を得たことは困難です(_:) 関数。私はソースビューコントローラとデスティネーションビューコントローラの詳細を知らない。ここに私の五セント。

ブロックの問題は、それらが異なるキューで実行されることが多く、segueの準備がブロックを起動し、ブロックが完了するのを待たずに次のView Controllerに進むことです。

私があなたのコードで見たのは、新しいView Controllerを制御していた古いView Controllerがムービーファイルを再生していることです。古いコントローラの同じプレーヤーを指しているだけで、新しいコントローラのプレーヤーが画面にムービーを表示することはありません。ムービーを画面に表示するにはAVPlayerViewが必要です。

私は "self.onDemandResources loadResourcesWithTags:@ [tag]"というメッセージに慣れていないので、ブロックでこのメッセージにコメントすることはできません。しかし、代わりに言っての:

playerViewController.videoURL = videoURL; 

そしてラインを実行します:先ビュー・コントローラ「AVPlayerVCで

AVPlayer *player = [AVPlayer playerWithURL:videoURL]; 

を*

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

私はブロックで次のコードをお勧めしますplayerViewController "を参照してください。

これが役に立ちます。

+0

私はその逆転をしました。ファイルを渡す代わりに、URLを渡して宛先VCにプレーヤをロードさせて再生させました。私はそれがこのように良いと思います。ありがとう! – SpaceDog

0

あなたはセグエをトリガーする前にビデオをダウンロードする必要がありますが、あなたの質問のために、私はあなたが時間制限を持っていないと思います

関連する問題