在我的 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, "<--?")
}
}
编辑: 需要明确的是,它“不运行”意味着完成 block 永远不会运行...因为它甚至永远不会运行并给出错误,完成 block 根本不会被调用(至少没有任何打印......)
这是一个打印语句,打印出我传递给参数的所有值:
phResourceManager:
资源.最后:
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
})
新网址: 可选(文件:///var/mobile/Containers/Data/Application/E2792F47-142E-4601-8D5B-F549D03C9AFE/Documents/Untitled%2027228354.MP4)
资源请求选项:
注意:这是资源变量的减速:
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 变量:)
关于ios - ResourceManager.write Data(for...不会在 iOS 14 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64723142/