我有一个imageView和一个按钮,可以从图片库上传图片并将其保存在imageView中。我做了documentDirectory,所以当我将照片上传到imageView时,即使我关闭了应用程序,它也会将图片保存在imageView中。
但我的问题是,每当我上传新照片时,它都会毫无问题地改变。但当我关闭应用程序并再次启动它时,老照片又回来了。
func saveImage(image : UIImage, imageName: String){
let documentDirectoryPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentDirectoryPath.appendingPathComponent(imageName)
if let data = UIImageJPEGRepresentation(image, 1.0),
!FileManager.default.fileExists(atPath: fileURL.path) {
do {
try data.write(to: fileURL)
print("Image saved")
} catch {
print("Image save error:", error)
}
}
}
func getImage(imageName: String) -> UIImage?{
let documentDirectoryPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentDirectoryPath.appendingPathComponent(imageName)
let image = UIImage(contentsOfFile: fileURL.path)
return image
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let image = info[UIImagePickerControllerOriginalImage] as? UIImage
imageView.image = image
saveImage(image:image!, imageName: "profile.jpg")
picker.dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
if let image = getImage(imageName: "profile.jpg"){
imageView.image = image}
}我期待图像的变化,并将保存,即使我关闭应用程序。
但实际上,它总是返回到我上传的第一张图片。
发布于 2019-05-05 01:46:40
看起来就像在saveImage中,您正在检查文件是否已经存在,如果文件确实存在,则不进行保存。这意味着当你第一次选择一个图片时,它会正确地保存,但任何后续的图片选择都会更新控件,但不会更新文件,这将导致下一次打开应用程序时旧图片再次出现。因此,您可能希望从if中完全删除fileExists检查。
您可以通过向saveImage中执行print()的if语句中添加一个else来验证这是发生了什么,并且在您第二次选择图像时,它应该结束在您的日志文件中:
if let data = UIImageJPEGRepresentation(image, 1.0),
!FileManager.default.fileExists(atPath: fileURL.path) {
// ...
}
else {
print("File exists -- image not saved")
}https://stackoverflow.com/questions/55984738
复制相似问题