Ios 使请求视频同步

Ios 使请求视频同步,ios,objective-c,asynchronous,Ios,Objective C,Asynchronous,我从gallery中所有选定的视频中获取URL,效果很好 但是我注意到,requestAVAssetForVideo是以异步方式执行的 之前我通过options:option更改options:nil指定了requestImageForAsset以同步方式执行 PHImageRequestOptions *option = [PHImageRequestOptions new]; option.synchronous = YES; 这就像一个符咒,但与requestAVAsse

我从gallery中所有选定的视频中获取URL,效果很好

但是我注意到,
requestAVAssetForVideo
是以异步方式执行的

之前我通过
options:option
更改
options:nil
指定了
requestImageForAsset
同步方式执行

PHImageRequestOptions *option = [PHImageRequestOptions new];
        option.synchronous = YES;
这就像一个符咒,但与
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]);
        }];
简短回答:没有

长答覆:

根据页面顶部的苹果:

请求表示视频资产内容的AV基础对象 和状态,异步加载


正如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];

这个API需要很长时间。还有其他选择吗?