Как обновить справочные данные хранилища в tableView, кэшированном с помощью SDWebImage? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть ссылка на изображение проекта в Firebase, и я хочу отредактировать фотографию, заменив данные в ссылке на хранилище, не меняя ссылку на ссылку.Я успешно делаю это, и представление изображения также обновляется, когда пользователь выбирает новое изображение.Однако, когда я возвращаюсь в контроллер навигации, мой tableView все еще показывает то же изображение - и когда я нажимаю на элемент tableView - изображение проекта, кажется, не обновляется.

Единственный способ, которым изображение иОбновление данных таблицы просмотра происходит, когда я удаляю симулятор со своего компьютера и повторно добавляю его.Вот некоторый мой код для того, как я заполняю tableView - код отлично работает для добавляемых новых проектов, но измененная часть не работает - я вызываю эту функцию в viewwillappear, чтобы заполнить tableview:

func checkForUpdates(uid: String) {

    handler = db.collection("Projects").whereField("UID", isEqualTo: "\(uid)").addSnapshotListener { snapShot, error in

    guard let document = snapShot else {return}

        if document.count > 0 {

    document.documentChanges.forEach { difference in

        if difference.type == .added {

            if let project = Project(dictionary: difference.document.data()) {

                self.projectArray.append(project)

                DispatchQueue.main.async {

                    self.tableView.reloadData()
                }
            }

            else {return}

            }

        if difference.type == .modified {

            DispatchQueue.main.async {

                self.loadData(uid: uid)
                self.tableView.reloadData()
            }

            return
        }

        if difference.type == .removed {return}

            else {return}
        }
    }

        else {

            print("no documents to show")
        }
    }
}

Когда я перехожу к просмотру определенного проекта (нажав на tableviewcell) - вот мой код

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "viewProject" {

        if let vc = segue.destination as? ViewMyProject {

            vc.selectedProject = self.selectedProject!
        }

        else {return}    
    }           
    else {return}
}

Вот мой код того, как я устанавливаю ячейки в файле xib

func setProject(project: Project) {

    projectName.text = project.title
    projectCategory.text = project.category
    projectDate.text = project.timeStamp.dateValue().dateToString(style: .short)
    projectImage!.sd_setImage(with: URL.init(string: project.imageLink)) { (image, error, cacheType, url) in

        if error != nil {

            print ("Error setting project cell image")
            return
        }

        else {

            print("Successfuly set project cell image")
        }
    }
}

И вот как я загружаю проект после нажатия на ячейку (я называю это в viewWillAppear)

func loadProject(project: Project) {

    filterProjectFeedback(project: project)

    if projectImage.image == nil {projectImage.sd_setImage(with: URL.init(string: project.imageLink))}

    projectDescription.text = project.description
}

Большое спасибо заранее - я чувствую, что это связано с сильной ссылкой - но яне могу сделать мою переменную "projectArray" слабой

1 Ответ

0 голосов
/ 03 июля 2019

Вот код в swift 3 для обновления кэша каждый раз:

imgCardBack.sd_setImage (с: URL (строка: objUserData.back_image!), PlaceholderImage: UIImage (named: "cardBack"), параметры:.refreshCached)

Как обновить изображение в кеше при изменении изображения на сервере с SDWebImage

...