Ios 如何在Xcode中使用用户默认值在视图控制器中保存图像?

Ios 如何在Xcode中使用用户默认值在视图控制器中保存图像?,ios,swift,Ios,Swift,在我的程序中,用户在第一视图控制器中随机选择一个图像,然后将所选图像发送到第二视图控制器。现在,我的问题是如何保存发送到第二视图控制器的图像(如果用户在第一视图控制器中选择另一个图像,保存的图像将被刷新),以便即使我转到另一个视图控制器,我也可以使用它?这是我的第一视图控制器的代码,以及我如何将所选图像发送到第二视图控制器:- var image1: UIImage! @IBAction func Button1(_ sender: UIButton) { imag

在我的程序中,用户在第一视图控制器中随机选择一个图像,然后将所选图像发送到第二视图控制器。现在,我的问题是如何保存发送到第二视图控制器的图像(如果用户在第一视图控制器中选择另一个图像,保存的图像将被刷新),以便即使我转到另一个视图控制器,我也可以使用它?这是我的第一视图控制器的代码,以及我如何将所选图像发送到第二视图控制器:-

var image1: UIImage!

@IBAction func Button1(_ sender: UIButton) {
         
    image1 = UIImage(named: "image")
    
}
@IBAction func Button2(_ sender: UIButton) {
         
    image1 = UIImage(named: "image")
    
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.destination is 2ndViewController {
        
        let vc2 = segue.destination as! 2ndViewController
        vc2.image2 = image1
    }
}

您不能在UserDefault中保存图像。这样您就可以在userDefaults中存储图像名称

并使用以下方法保存和检索图像

保存图像

 func saveImage(image: UIImage) -> Bool {
        guard let data = UIImageJPEGRepresentation(image, 1) ?? UIImagePNGRepresentation(image) else {
            return false
        }
        guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
            return false
        }
        do {
            try data.write(to: directory.appendingPathComponent("fileName.png")!)
            return true
        } catch {   
            print(error.localizedDescription)
            return false
        }
    }
func getSavedImage(named: String) -> UIImage? {
    if let dir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) {
        return UIImage(contentsOfFile: URL(fileURLWithPath: dir.absoluteString).appendingPathComponent(named).path)
    }
    return nil
}
检索图像

 func saveImage(image: UIImage) -> Bool {
        guard let data = UIImageJPEGRepresentation(image, 1) ?? UIImagePNGRepresentation(image) else {
            return false
        }
        guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
            return false
        }
        do {
            try data.write(to: directory.appendingPathComponent("fileName.png")!)
            return true
        } catch {   
            print(error.localizedDescription)
            return false
        }
    }
func getSavedImage(named: String) -> UIImage? {
    if let dir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) {
        return UIImage(contentsOfFile: URL(fileURLWithPath: dir.absoluteString).appendingPathComponent(named).path)
    }
    return nil
}

您不能在UserDefault中保存图像。这样您就可以在userDefaults中存储图像名称

并使用以下方法保存和检索图像

保存图像

 func saveImage(image: UIImage) -> Bool {
        guard let data = UIImageJPEGRepresentation(image, 1) ?? UIImagePNGRepresentation(image) else {
            return false
        }
        guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
            return false
        }
        do {
            try data.write(to: directory.appendingPathComponent("fileName.png")!)
            return true
        } catch {   
            print(error.localizedDescription)
            return false
        }
    }
func getSavedImage(named: String) -> UIImage? {
    if let dir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) {
        return UIImage(contentsOfFile: URL(fileURLWithPath: dir.absoluteString).appendingPathComponent(named).path)
    }
    return nil
}
检索图像

 func saveImage(image: UIImage) -> Bool {
        guard let data = UIImageJPEGRepresentation(image, 1) ?? UIImagePNGRepresentation(image) else {
            return false
        }
        guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
            return false
        }
        do {
            try data.write(to: directory.appendingPathComponent("fileName.png")!)
            return true
        } catch {   
            print(error.localizedDescription)
            return false
        }
    }
func getSavedImage(named: String) -> UIImage? {
    if let dir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) {
        return UIImage(contentsOfFile: URL(fileURLWithPath: dir.absoluteString).appendingPathComponent(named).path)
    }
    return nil
}

您必须使用文件系统,并且您可以将图像的名称存储在用户默认设置中。@Yodagama您能给我举个例子说明如何做到这一点吗?非常感谢!我对我的答案进行了一点编辑。。(在那里添加了一些解释)你必须使用文件系统,你可以将图像的名称存储在用户默认值中。@Yodagama你能给我一个如何做到这一点的例子吗?非常感谢!我编辑了一下我的答案…(在那里添加了一些解释)谢谢你的答案!我理解saveImage函数,输入参数就是我们需要保存的图像。但是,在getSavedImage函数中,在检索保存的图像时,输入参数应该是什么?谢谢啊,我明白了,getSavedImage函数中的输入参数是文件目录名!谢谢你的帮助!谢谢你的回答!我理解saveImage函数,输入参数就是我们需要保存的图像。但是,在getSavedImage函数中,在检索保存的图像时,输入参数应该是什么?谢谢啊,我明白了,getSavedImage函数中的输入参数是文件目录名!谢谢你的帮助!