Я настраиваю контроллер представления, где пользователь выбирает пользовательское фоновое изображение, которое будет отображаться на предыдущем контроллере представления вместо фона по умолчанию.
Текущая проблема, с которой я сталкиваюсь, заключается в том, что после закрытия контроллера вида фон не меняется на новый IF пользователь переключается с одного нового фона наеще один новый.
Если они меняются с фона по умолчанию на новый, он меняется отлично. Если я перейду с одного нового фона на другой и закрою приложение. Правый будет отображаться при открытии.
Кроме того, если я использую функцию смахивания, чтобы удалить изображение, сохраненное в filePath, фон по умолчанию отображается нормально при отклонении.
Проблема возникает только при переходе с одного нового фона на другой. Проблема также возникает при возврате во второй контроллер представления для изменения фона. В ячейке снова отображается старое «новое фоновое изображение». хотя он обновлялся до правильного нового при первоначальном выборе.
Мне кажется, что fileManager загружает данные (изображения) при запуске или при первоначальном создании (изменение фона в первый раз), и даже если эти данные перезаписываются. Он не загружает его снова, пока приложение не будет закрыто и перезапущено.
Функция viewDidLoad вызывается при отключении второго контроллера представления, использующего протокол для перезагрузки контроллера представления, чтобы отображался новый фон.
У меня есть операторы print, показывающие filePaths и новое фоновое изображение, которое заменило другое старое «новое фоновое изображение», и filePath фонового изображения, вызываемого при viewDidLoad, являются точными совпадениями.
Однако старое «новое фоновое изображение» все еще отображается.
//Row selected
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Image to change picked in row \(indexPath.row)")
lastSelectedIndex = indexPath
self.present(imagePicker, animated: true, completion: nil)
}
// places selected image in image array and reloads table data so image is displaced in cell - also calls save photo
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
imagePicker.dismiss(animated: true, completion: nil)
if let photo = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
//removeCustomPicture(imagePath: customImagesArray[lastSelectedIndex!.row].filePath, row: lastSelectedIndex!.row)
customImagesArray[lastSelectedIndex!.row].image = photo
customImagesArray[lastSelectedIndex!.row].filePath = saveImage(imageName: "\(customImageLabelArray[lastSelectedIndex!.row]).png", row: lastSelectedIndex!.row)
tableView.reloadData()
}
else {
print("Error retrieving image")
}
}
//save photo
func saveImage(imageName: String, row: Int) -> String{
print("save image called")
let fileManager = FileManager.default
//get the image path
let imagePath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(imageName)
print("save image function: \(imagePath)")
//get the image we took from photo library
let image = customImagesArray[row].image
//get the PNG data for this image
let data = image.pngData()
//store it in the document directory
fileManager.createFile(atPath: imagePath, contents: data, attributes: nil)
return imagePath
}
//load image
func getImage(imageName: String, row: Int) -> String {
let fileManager = FileManager.default
let imagePath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("\(imageName).png")
if fileManager.fileExists(atPath: imagePath){
customImagesArray[row].image = UIImage(imageLiteralResourceName: imagePath)
print("get image called")
} else {
print("Panic! No Image!")
}
return imagePath
}