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

PHAsset copy from one album to another

我想将资产从一个相册复制到另一个相册,而不要求图像数据或视频数据,也就是说,只将资产从一个相册复制到另一个相册

我做什么

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'

ofc 资产存在,相册存在,如果我将视频保存到文件并使用 creationRequestForAssetFromVideo...

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

okey 我找到方法了)

视频

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

解释: 我们不能直接复制资产,但是我们可以从资产在系统中的位置获取路径,并用它来复制到我们的相册

编码愉快 ;)