Изображения в табличном представлении перезагружаются автоматически - PullRequest
0 голосов
/ 08 июня 2018

У меня есть TabBarController с некоторыми viewControllers.Во-первых, у меня есть UITableview с некоторыми изображениями, но когда я вставляю новое изображение и возвращаюсь в раздел ленты, я вижу новое изображение, но когда я прокручиваю различные изображения, изображения автоматически перезагружаются;они не остаются исправленными, но перезаряжаются, когда я бегу.Решения?

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath) as! PostCell
    cell.postID = self.posts[indexPath.row].postID
    cell.userImage.layer.cornerRadius = 25.0
    cell.userImage.clipsToBounds = true
    cell.author.text = self.posts[indexPath.row].nameuser
    cell.userImage.downloadImage(from: self.posts[indexPath.row].userimage)
    cell.postImage.downloadImage(from: self.posts[indexPath.row].pathToImage)
    cell.caption.text = self.posts[indexPath.row].caption

    return cell
}

func loadPosts() {
    followpeople()
    Database.database().reference().child("posts").observe(.childAdded) { (snapshot: DataSnapshot) in
        if let dict = snapshot.value as? [String: Any] {
            let captionText = dict["caption"] as! String
            let photoUrlString = dict["photoUrl"] as! String
            let photoimage = dict["profileImageUrl"] as! String
            let author = dict["Author"] as! String
            let postid = dict["postID"] as! String
            let uda = dict["uid"] as! String
            let like = dict["likes"] as! Int
            let date = dict["date"] as! String
            let posst = Post()
            posst.nameuser = author
            posst.likes = like
            posst.caption = captionText
            posst.postID = postid
            posst.pathToImage = photoUrlString
            posst.userimage = photoimage
            posst.userID = uda
            self.posts.append(posst)
            self.tableView.reloadData()

        }
    }
}

func downloadImage(from imgURL: String!) {
    let url = URLRequest(url: URL(string: imgURL)!)
    let task = URLSession.shared.dataTask(with: url) {
        (data, response, error) in
        if (error != nil) {
            print(error!)
            return
        }
        DispatchQueue.main.async {
            self.image = UIImage(data: data!)
        }
    }
    task.resume()
}

1 Ответ

0 голосов
/ 08 июня 2018

Проблема из-за этих 2 строк

cell.userImage.downloadImage(from: self.posts[indexPath.row].userimage)
cell.postImage.downloadImage(from: self.posts[indexPath.row].pathToImage)

они будут извлекать изображения снова, даже если они только что были загружены, когда вы прокручиваете, подумайте об использовании SDWebImage вместо того, чтобы кэшировать изображение после первойскачать

1 - установить SDWebImage, добавив для него модуль

2 - заменить 2 строки на

cell.userImage.sd_setImage(with: URL(string: self.posts[indexPath.row].userimage), placeholderImage: UIImage(named: "placeholder.png"))
cell.postImage.sd_setImage(with: URL(string: self.posts[indexPath.row].pathToImage), placeholderImage: UIImage(named: "placeholder.png"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...