Как сохранить изображение в контроллере представления, используя пользовательские настройки по умолчанию в Xcode?

#ios #swift

#iOS #swift

Вопрос:

В моей программе пользователь случайным образом выбирает изображение в 1-м контроллере представления, а затем выбранное изображение отправляется на 2-й контроллер представления. Теперь мой вопрос в том, как я могу сохранить это изображение, отправленное на 2-й контроллер представления (сохраненное изображение будет обновлено, если пользователь выберет другое изображение в 1-м контроллере представления), чтобы я мог использовать его, даже если я перейду на другой контроллер представления? Это код моего 1-го контроллера представления, и как я отправляю выбранное изображение на 2-й контроллер представления:-

 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
    }
}
  

Комментарии:

1. вы должны использовать файловую систему, и вы можете сохранить имя изображения по умолчанию для пользователя.

2. @Yodagama Не могли бы вы привести мне пример того, как я могу это сделать? Был бы признателен!

3. Я немного отредактировал свой ответ.. (добавлено некоторое объяснение)

Ответ №1:

вы не можете сохранять изображения в UserDefaults. чтобы вы могли сохранить имя изображения в 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
}
  

Комментарии:

1. Спасибо за ответ! Я понял функцию SaveImage, что входным параметром является изображение, которое нам нужно сохранить. Но в функции getSavedImage каким должен быть входной параметр при извлечении сохраненного изображения? Спасибо!

2. Ах, я вижу, входной параметр в функции getSavedImage — это имя каталога файла! Спасибо за помощь!