Swift中如何将UIImage数组存入UserDefaults用于UITableView临时存储
如何在UserDefaults中存储UIImage数组用于UITableView
嘿,我明白你的需求了——想用UserDefaults临时存图片数组给UITableView用,确实不能直接用stringArray,得绕个小弯:把UIImage转成Data格式,再存储Data类型的数组,因为UserDefaults原生支持Data类型的存储。下面给你具体的实现步骤和代码示例:
保存图片数组到UserDefaults
首先你需要把每个UIImage转换成Data(PNG或JPEG格式都可以),然后把这些Data打包成数组,再存入UserDefaults:
// 假设你已经有了要存储的UIImage数组 var yourImageArray: [UIImage] = [UIImage(named: "sample1")!, UIImage(named: "sample2")!] // 转换UIImage为Data数组 var imageDataArray: [Data] = [] for image in yourImageArray { // 如果你要存PNG格式,用这个方法 if let pngData = image.pngData() { imageDataArray.append(pngData) } // 如果你要存JPEG格式(可以压缩体积),替换成下面这行 // if let jpegData = image.jpegData(compressionQuality: 0.8) { imageDataArray.append(jpegData) } } // 将Data数组存入UserDefaults UserDefaults.standard.set(imageDataArray, forKey: "StoredImageArray") // 手动同步确保数据写入(虽然现在UserDefaults会自动同步,但手动调用更稳妥) UserDefaults.standard.synchronize()
从UserDefaults读取图片数组
读取的时候反过来,先取出Data数组,再把每个Data转回UIImage,就能得到可以给UITableView用的图片数组了:
// 从UserDefaults取出存储的Data数组 guard let savedDataArray = UserDefaults.standard.array(forKey: "StoredImageArray") as? [Data] else { // 如果没取到数据,做个兜底处理 print("没有找到存储的图片数据") return } // 转换Data数组为UIImage数组 var loadedImageArray: [UIImage] = [] for data in savedDataArray { if let image = UIImage(data: data) { loadedImageArray.append(image) } } // 现在loadedImageArray就是你要的图片数组,可以赋值给UITableView的数据源然后刷新 yourTableView.reloadData()
重要提醒
- UserDefaults本质是一个plist文件,只适合存储小体积的图片(比如缩略图、小图标)。如果是高清大图或者大量图片,建议用App的Documents目录来存储,不然会拖慢App启动速度,还可能占用过多内存导致性能问题。
- 用JPEG格式存储时,可以通过调整
compressionQuality参数(0到1之间)来平衡图片质量和体积:0是最低质量最小体积,1是最高质量最大体积。 - 转换过程中要注意判空,避免因为单个图片转换失败导致整个数组存储/读取出问题。
内容的提问来源于stack exchange,提问作者Miloo
相关产品推荐
相关产品推荐

