2016-12-07 5 views
1

ギャラリー内のすべての動画からURLを取得していますが、うまく動作します。requestAVAssetForVideoを同期させる

しかし、私はrequestAVAssetForVideoの非同期の方法で実行されていることに気付きました。

以前の私はoptions:option

PHImageRequestOptions *option = [PHImageRequestOptions new]; 
     option.synchronous = YES; 

options:nilを変更することにより、requestImageForAsset同期な方法で実行されるように指定され、それは魔法のように動作しますが、それはrequestAVAssetForVideo

と同じ形式として機能していません

requestAVAssetForVideoの同期で実行する方法はありますか?

[[PHImageManager defaultManager] requestAVAssetForVideo:lAsset 
                 options:nil 
                resultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) { 
      NSURL *url = (NSURL *)[[(AVURLAsset *)avAsset URL] fileReferenceURL]; 
      NSLog(@"url = %@", [url absoluteString]); 
      NSLog(@"url = %@", [url relativePath]); 
     }]; 
+0

このAPIは、長い時間がかかっているし。他の代替オプション? –

答えて

0

まあ、CodeBenderがないですが、これは同期バージョン構築するための方法であると言うよう:

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 

PHVideoRequestOptions *option = [PHVideoRequestOptions new]; 
__block AVAsset *resultAsset; 


[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset 
               options:option 
              resultHandler:^(AVAsset * avasset, AVAudioMix * audioMix, NSDictionary * info) 
      { 
       resultAsset = avasset; 
       dispatch_semaphore_signal(semaphore); 
      }]; 

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 
// We synchronously have the asset 
[self doSomethingWithAsset:resultAsset]; 
1

短い答え:いいえ。

長い答え:Appleのdocumentation hereページの上部にあるパー

要求ビデオ資産の内容 を代表するAV Foundationのオブジェクトとロードするにはを非同期ににします。

関連する問題