如何在使用SDWebImage缓存的tableView中刷新存储参考数据?

时间:2019-07-01 22:09:42

标签: swift firebase uitableview google-cloud-storage sdwebimage

我在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 :(得分:0)

这是swift 3中的代码,每次都可以刷新缓存:

imgCardBack.sd_setImage(包含:URL(字符串:objUserData.back_image!),占位符图像:UIImage(名称:“ cardBack”),选项:.refreshCached)

How to update image in cache when image changed on server with SDWebImage