2017-12-03 1 views
0

すべての画像と動画をPHAssetとして配列に取り込み、そのURLを取得しようとしています。コードの次の部分では、私はURLパスの拡張子を取得しようとしていますが、この行で私はエラーが発生しています。ビデオURL pathExtension find nil

var imagesAndVideos: PHFetchResult<PHAsset>! 
let asset = imagesAndVideos!.object(at: indexPath.row) 

func grabPhotos(){ 
let imgManager = PHImageManager.default() 


let fetchOptions = PHFetchOptions() 
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 


fetchOptions.predicate = NSPredicate(format: "mediaType == %d || mediaType == %d", 
             PHAssetMediaType.image.rawValue, 
             PHAssetMediaType.video.rawValue) 

imagesAndVideos = PHAsset.fetchAssets(with: fetchOptions) 
} 

var ext:String! 
var url:NSURL! 

imgManager.requestAVAsset(forVideo: asset, options: nil, resultHandler: {(asset: AVAsset?, audioMix: AVAudioMix?, info: [AnyHashable : Any]?) in 

      DispatchQueue.main.async(execute: { 
      let myAsset = asset as! AVURLAsset 

      url = myAsset.url as NSURL 
      self.photoLibraryVideoUrl.append(url) 
      let videoData = NSData(contentsOf : url as URL) 
      self.videoDataArray.append(videoData!) 
      }) 

     }) 

    ext = "."+url.pathExtension! 
    self.nameArray.append(dateStringForFolder+ext) 

それは、この行のnilであるURLを示しています:

ext = "."+url.pathExtension! 

このエラーが毎回表示されません。私のコードは以下与えるです。私は(ext = "。" + url.pathExtension!)URLが価値を得る前にコードが実行されていると思います。どうすればこの問題を解決できますか?

答えて

1

requestAVAssetは非同期関数であり、実行が完了するとクロージャが呼び出されます。したがって、requestAVAsset完了クロージャの実行前であっても、ext = "."+url.pathExtension!およびself.nameArray.append(dateStringForFolder+ext)を実行することができます。クロージャ内でコードを移動する必要があります。

imgManager.requestAVAsset(forVideo: asset, options: nil, resultHandler: {(asset: AVAsset?, audioMix: AVAudioMix?, info: [AnyHashable : Any]?) in 
    DispatchQueue.main.async(execute: { 
     let myAsset = asset as! AVURLAsset 
     url = myAsset.url as NSURL 
     self.photoLibraryVideoUrl.append(url) 
     let videoData = NSData(contentsOf : url as URL) 
     self.videoDataArray.append(videoData!) 
     ext = "."+url.pathExtension! 
     self.nameArray.append(dateStringForFolder+ext) 
    }) 

}) 
関連する問題