我正在设置一个视图控制器,用户可以在其中选择要显示在前一个视图控制器上的自定义背景图像,而不是默认背景。
然后在tableViewCell中显示正确的新背景图像
退出视图控制器后。将显示新选择的背景。
我当前遇到的问题是,在关闭视图控制器后,背景不会更改为新的 IF ,用户正在从一个新的背景更改为另一个新的背景。
如果它们从默认背景更改为新背景,则可以很好地更改。如果我从一种新背景更改为另一种背景,然后关闭该应用程序。打开后将显示右边的一个。
此外,如果我使用滑动功能删除存储在filePath中的图像,则关闭后默认背景也会很好显示。
仅从一种新背景到另一种背景时才出现问题。回到第二视图控制器更改背景时,也会发生此问题。单元格再次显示旧的“新背景图像”。即使它确实已根据其原始选择更新为正确的新版本。
我觉得fileManager是在启动时还是在原始创建时(第一次更改背景)加载了数据(图像),即使该数据已被覆盖。在应用关闭并重新启动之前,不会再次加载它。
使用协议重新加载视图控制器以关闭第二个视图控制器时,将调用viewDidLoad函数,以便显示新的背景。
我有一些打印语句,它们显示filePaths和替换了其他旧“新背景图像”的新背景图像以及在viewDidLoad上调用的背景图像filePath完全匹配。
但是仍然显示旧的“新背景图像”。
//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
}