Есть ли способ перезагрузить данные с помощью файлового менеджера? - PullRequest
1 голос
/ 12 октября 2019

Я настраиваю контроллер представления, где пользователь выбирает пользовательское фоновое изображение, которое будет отображаться на предыдущем контроллере представления вместо фона по умолчанию.

  • Пользователь выбирает фотографию из своей библиотеки фотографий, которая сохраняется с помощью fileManager.
  • правильное новое фоновое изображение затем отображается в таблице ViewCell

  • После выхода из контроллера представления. Новый выбранный фон будет отображен.

Текущая проблема, с которой я сталкиваюсь, заключается в том, что после закрытия контроллера вида фон не меняется на новый 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
}
...