从一张专辑到另一张专辑的PHAsset复制

问题描述

我想将资产从一个相册复制到另一相册,而不需要imageData或videoData,也就是说,只需将资产从一个相册复制到另一相册

我做什么

let asset = PHAsset.fetchAssets(withLocalIdentifiers: [assetLocalIdentifier],options: .none).firstObject
PHPhotoLibrary.shared().performChanges({
    guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: album) else { return }
    albumChangeRequest?.addAssets([asset] as NSFastEnumeration)
})

相册是我的自定义相册

即时通讯崩溃

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',reason: '-[__NSCFString objectID]: unrecognized selector sent to instance 0x600002339340'
如果我将视频保存到文件并使用creationRequestForAssetFromVideo ...,则

ofc资产存在,相册也存在,并且一切正常。

通过creationRequestForAssetFromVideo进行保存没有问题,但是为此,我需要先保存该视频,并且我想复制用户选择的内容而不必等待视频被保存,甚至可以吗?

解决方法

好吃的东西找到方法

视频

PHImageManager.default().requestAVAsset(forVideo: asset,options: PHVideoRequestOptions()) { (avAsset,_,_) in
    if let assetURL = avAsset as? AVURLAsset {
         _url = assetURL.url
....

图片

asset.requestContentEditingInput(with: PHContentEditingInputRequestOptions()) { (contentEditingInput,_) in
    if let url = contentEditingInput?.fullSizeImageURL {
         _url = url
....

现在是图片

PHAssetChangeRequest.creationRequestForAssetFromImage

或视频

PHAssetChangeRequest.creationRequestForAssetFromVideo

说明: 我们无法直接复制资产,但可以从系统中资产所在的位置获取路径并将其复制到相册中

快乐编码;)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...