swift - 我无法使用 PHPhotoLibrary 删除带有照片的自定义相册
问题描述
我很难弄清楚如何删除我的应用制作的自定义相册及其照片。注意:我可以删除相册,但不能连同照片一起删除。
我基于 STACKOVERFLOW 的代码:它有效,但它会删除相机胶卷中的所有照片。
func deleteAllPhotos() {
let library = PHPhotoLibrary.shared()
library.performChanges({
let fetchOptions = PHFetchOptions()
let allPhotos = PHAsset.fetchAssets(with: .image, options: fetchOptions)
PHAssetChangeRequest.deleteAssets(allPhotos)
}) { (success, error) in
// Handle success & errors
}
}
我根据上述代码修改的代码:
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
let assetCollections = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
let album: PHAssetCollection = assetCollections.firstObject!
let allPhotos = PHAsset.fetchAssets(with: .image, options: fetchOptions)
PHPhotoLibrary.shared().performChanges({
guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: (album)) else { return }
let fastEnumeration = NSArray(array: [allPhotos])
albumChangeRequest.removeAssets(fastEnumeration)
}, completionHandler: { success, error in
if success {
print("removed")
} else {
print("not removed")
}
})
错误:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“获取选项中不支持的谓词:title ==“albumName”
解决方案
诀窍是in
与album
for一起使用fetchAssets
:
let allPhotos = PHAsset.fetchAssets(in: album!, options: nil)
PHAssetChangeRequest.deleteAssets(allPhotos)
推荐阅读
- css - 我怎样才能使用网格系统制作这个部分?
- c# - 在文本文件中搜索数组元素
- javascript - 如何在网站中搜索并获取下一个参数?
- typescript - Rollup + Svelte + typescript:无法使用 rollup-plugin-import-alias
- c# - swagger.json 路径和定义为空。规范中没有定义操作
- macos - osx mkdir 无法在 ~ 创建文件夹
- ruby-on-rails - 基于条件变量和实例变量使用 http_basic_authenticate_with
- c# - 如果按照官方文档中的方式调用,为什么 ASP.NET API 调用会冻结?
- bootstrap-4 - Bootstrap 4 在移动设备上更改列位置
- python - 如何将 GeoTIFF 投影到指定区域范围?