Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 视频URL路径扩展查找零_Ios_Swift3 - Fatal编程技术网

Ios 视频URL路径扩展查找零

Ios 视频URL路径扩展查找零,ios,swift3,Ios,Swift3,我正在获取数组中所有的图像和视频作为PHAsset,然后尝试获取它们的URL。在代码的下一部分中,我试图获得URL路径扩展,在这一行中,我得到了错误。我的代码如下: var imagesAndVideos: PHFetchResult<PHAsset>! let asset = imagesAndVideos!.object(at: indexPath.row) func grabPhotos(){ let imgManager = PHImageManager.default()

我正在获取数组中所有的图像和视频作为PHAsset,然后尝试获取它们的URL。在代码的下一部分中,我试图获得URL路径扩展,在这一行中,我得到了错误。我的代码如下:

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)

并非每次都显示此错误。我认为(ext=“.”+url.pathExtension!)代码是在url获取值之前执行的。我怎样才能解决这个问题

requestAVAsset
是一个异步函数,一旦执行完成,就会调用闭包。所以
ext=“.”+url.pathExtension
self.nameArray.append(dateStringForFolder+ext)
甚至可以在执行
requestAVAsset
完成闭包之前执行。您必须将代码移到闭包中

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)
    })

})

requestAVAsset
是一个异步函数,执行完成后将调用闭包。所以
ext=“.”+url.pathExtension
self.nameArray.append(dateStringForFolder+ext)
甚至可以在执行
requestAVAsset
完成闭包之前执行。您必须将代码移到闭包中

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)
    })

})