使用SDWebImage加载assets-library本地图片URL显示为空的问题
解决SDWebImage加载assets-library URL图片为空的问题
嘿,这个问题我之前也踩过坑!核心原因是你用的assets-library://是iOS 8就被苹果弃用的旧资源定位方案,SDWebImage的默认加载器并不支持这个协议,所以才会出现加载后图片为空的情况。下面给你两个靠谱的解决办法:
方法一:手动通过Photos框架转换并加载图片
苹果现在推荐用Photos框架来访问本地图库资源,我们可以把旧的assets-library URL转换成PHAsset,再获取图片:
import Photos // 封装一个转换并加载图片的方法 func loadImageFromAssetsURL(_ url: URL, into imageView: UIImageView) { // 用旧URL获取对应的PHAsset let fetchResult = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil) guard let asset = fetchResult.firstObject else { imageView.image = UIImage(named: "sampleImg") return } // 通过PHImageManager请求图片 let imageManager = PHImageManager.default() let requestOptions = PHImageRequestOptions() requestOptions.deliveryMode = .highQualityFormat // 按需选择图片质量 requestOptions.isNetworkAccessAllowed = false // 本地资源不需要网络权限 // 设置适配imageView的图片尺寸 let targetSize = imageView.bounds.size imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: requestOptions) { fetchedImage, _ in DispatchQueue.main.async { imageView.image = fetchedImage ?? UIImage(named: "sampleImg") } } } // 在cell配置代码里调用 loadImageFromAssetsURL(myImgObj[0].url, into: cell.productImageView)
方法二:使用SDWebImage的Photos扩展插件
SDWebImage官方提供了专门处理Photos资源的插件SDWebImagePhotosPlugin,集成后就能直接用你原来的代码加载assets-library URL了:
- 先在Podfile里添加依赖:
pod 'SDWebImage' pod 'SDWebImagePhotosPlugin'
- 执行
pod install更新项目依赖 - 代码里导入插件后,原来的加载代码就能正常工作:
import SDWebImage import SDWebImagePhotosPlugin // 直接用你原来的代码即可 cell.productImageView.sd_setImage(with: myImgObj[0].url, placeholderImage: UIImage(named: "sampleImg"))
额外建议
尽量不要再存储assets-library这种旧格式的URL了,苹果现在推荐存储PHAsset的localIdentifier,后续通过这个ID获取PHAsset会更稳定,也能避免版本兼容问题。
内容的提问来源于stack exchange,提问作者user8894520
相关产品推荐
相关产品推荐

