Swift 4中修改图片文件存储值?按钮图片不更新问题求助
解决重复文件名导致图片不更新的问题
嘿,这个问题我太熟了——你这是踩了「固定文件名覆盖旧文件」的坑!你现在的代码每次都把新图片存成"image.jpg",第二次保存直接把第一次的文件覆盖了,按钮加载的还是旧文件的内容,自然显示不会变。给你几个具体的修改步骤:
第一步:给每张图片生成唯一文件名
别再用固定的"image.jpg"了,换成每次都不一样的名字,比如用UUID(完全唯一)或者时间戳,这样就不会覆盖旧文件了:// 方案1:用UUID生成唯一文件名(推荐,绝对不重复) let fileName = "\(UUID().uuidString).jpg" // 方案2:用毫秒级时间戳生成文件名 let timestamp = Date().timeIntervalSince1970 * 1000 let fileName = "\(timestamp).jpg"第二步:记录当前要显示的文件名
你得把最新保存的图片文件名存起来,比如用UserDefaults,这样按钮知道该加载哪一张:// 保存图片成功后,把文件名存到UserDefaults UserDefaults.standard.set(fileName, forKey: "CurrentDisplayImage")第三步:按钮加载图片时读取记录的文件名
当你要在按钮上显示图片时,从UserDefaults取出文件名,再去读取对应的文件:let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! if let currentFileName = UserDefaults.standard.string(forKey: "CurrentDisplayImage") { let targetImageURL = documentsDirectory.appendingPathComponent(currentFileName) if let newImage = UIImage(contentsOfFile: targetImageURL.path) { // 替换成你的按钮实例 yourDisplayButton.setImage(newImage, for: .normal) } }可选优化:清理旧图片
如果不想让文档目录里堆太多没用的旧图片,可以在保存新图片前,把之前的旧文件删掉:let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! if let oldFileName = UserDefaults.standard.string(forKey: "CurrentDisplayImage") { let oldImageURL = documentsDirectory.appendingPathComponent(oldFileName) // 尝试删除旧文件,忽略错误(比如第一次保存时没有旧文件) try? FileManager.default.removeItem(at: oldImageURL) }
这样修改后,每次保存的图片都是独立的文件,按钮也会加载最新记录的那张,就不会再出现显示旧图片的问题啦!
内容的提问来源于stack exchange,提问作者Andrew Dogg
相关产品推荐
相关产品推荐

