微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

phResourceManager.writeDatafor ...不会在iOS 14上运行

如何解决phResourceManager.writeDatafor ...不会在iOS 14上运行

在我更新到iPhone上的iOS 14之前,此代码运行良好。之后,iOS 14奇怪的是没有运行...这很奇怪,我还没有在线看到任何解决方案,此外,根据我的调查,我还没有看到任何更改。

使用此代码是为了从导入的相机胶卷中检索该视频的videoURL(我使用导入的照片...)。

phResourceManager.writeData(for: resource.last!,toFile: newURL!,options: resourceRequestOptions) { (error) in
    if error != nil {
        print(error,"not c67omplted error?")
    } else {
        print("woah completedd 345?")
        
        newUserTakenVideo.videoURL = newURL
        print(newUserTakenVideo.videoURL,"<--?")
    }
}

编辑: 要明确的是,它“不运行”表示补全块永远不会运行……因为它甚至从不运行并给出错误,因此补全块根本就不会被调用(至少不会打印任何内容。)

这是一条打印语句,打印出我传递给参数的所有值:

phResourceManager:

resource.last:

Optional(<PHAssetResource: 0x28128bc00> {
    type: video
    uti: public.mpeg-4
    filename: v07044090000bu6n1nhlp4leque7r720.mp4
    asset: C97B45D3-7039-4626-BA3E-BCA67912A2A9/L0/001
    locallyAvailable: YES
    fileURL: file:///var/mobile/Media/DCIM/113APPLE/IMG_3404.MP4
    width: 576
    height: 1024
    fileSize: 4664955
    analysisType: unavailable
    cplResourceType: Original
    isCurrent: YES
}) 

newURL : 可选(文件:///var/mobile/Containers/Data/Application/E2792F47-142E-4601-8D5B-F549D03C9AFE/Documents/Untitled%2027228354.MP4)

resourceRequestOptions

注意:这是资源变量的定义:

let resource = PHAssetResource.assetResources(for: (cell?.assetPH)!)

解决方法

我对此有解决方案! Swift 4+,已在iOS 14上进行了测试!

我使用PHAssetResourceRequest进行了浏览,但是在此过程中文件名被弄乱了,通常它不适用于我的沙箱。然后,我还尝试从PHAsset请求AVPlayerItem,但这也不适用于沙箱...

但是,然后,我尝试仅使用PHAssetResourceManager.default()。writeData(...)似乎开始工作了!

我进行了更多测试,似乎可以正常工作,下面是完整的代码:

                    let resource = PHAssetResource.assetResources(for: (cell?.assetPH)!)
                    let resourceRequestOptions = PHAssetResourceRequestOptions() 
                    
                    let newURL = ExistingMediaVC.newFileUrl
                    
                    PHAssetResourceManager.default().writeData(for: resource.last!,toFile: newURL!,options: resourceRequestOptions) { (error) in
                        if error != nil {
                            print(error,"error")
                        } else {
                            print("good")
                            newUserTakenVideo.videoURL = newURL
                        }
                    }

这很简单!告诉我是否有任何问题,请注意,我仍然仍然使用您在原始代码中使用的ExisitingMedia.fileURL变量:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。