2016-11-06 4 views
2

[PHCachingImageManager]를 사용하여 비디오를 컬렉션보기로 캐시합니다. 캐시 관리자로 생성 된 이미지를 표시 할 수 있지만 AVAssets를 가져 오지 않습니다.PHCacheImageManager.requestAVAsset (forVideo : ...)는 nil AVAsset을 반환합니다.

.requestAVAsset (forVideo : ...) 메서드를 사용하여 AVAsset을 가져 오려고하지만 결과 처리기에 반환 된 [asset]이 nil입니다. 반환 된 [저작물]을 unwrap하려고 할 때 오류가 발생합니다.

[audioMix] 및 [info] 매개 변수가 결과 처리기에 반환 된 것으로 보아도 아무 것도 없었습니다. 아무도 내가 뭘 잘못하고/여기에 실종 알아?

viewDidLoad() { 
    let videosAlbum = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumVideos, options: nil) 
    self.videoAssets = PHAsset.fetchAssets(in: videosAlbum.object(at: 0), options: nil) 

    self.imgCacheManager.startCachingImages(for: self.videoAssets.objects(at: [0, videoAssets.count-1]), targetSize: CGSize(width: 150, height: 150), contentMode: .aspectFit, options: nil) 
} 

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

    let selectedAsset = self.imgCacheManager.requestAVAsset(forVideo: self.videoAssets.object(at: indexPath.item), options: nil, resultHandler: { 
     asset,_,_ in 

     self.delegate.selectedVideo(Asset: asset!) // this is the line I get the error 
    }) 
} 

내 대표는 선택 사항이지만 확실히 거기에 뭔가를 가지고, 그래서 그 오류를 던지고는 미개봉 [자산]입니다 확신합니다.

답변

4

네트워크 액세스를 허용하도록 비디오 요청 옵션을 설정하지 않고 iCloud에 저장된 비디오 자산을 요청한 것 같습니다.

PHCachingImageManager에서 비디오를 요청할 때 PHVideoRequestOptions 객체를 전달하지 못했습니다. 자산을 요청하기 직전에 아래 라인을 추가하면이를 수정합니다.

let options = PHVideoRequestOptions() 
options.isNetworkAccessAllowed = true 

Photos 프레임 워크를 사용하는 오픈 소스 이미지 선택 도구에서 this thread을 찾았습니다. 내가 테스트 한 비디오는 iCloud에서 실제로 반환 된 자산을 무효로 만들었습니다. 링크 된 스레드는 객관적인 C에서 진행 핸들러를 연결하는 좋은 예입니다.

options.networkAccessAllowed = YES; 
options.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *info) 
{ 
... 
}; 
+0

감사합니다! 나는 코드를 Swift4로 업그레이드 한 후이 문제에 직면했다.'options.isNetworkAccessAllowed = true'가 도움이되었다. –