Как получить изображение из firebase и сохранить его в image в tableviewcell?

Я использую TableViewController и получаю изображение из firebase внутри Closure. Я получаю имя изображений в локальной базе данных и сохраняю его в массиве во время выборки. Но когда я обращаюсь к массиву изображений с помощью indexPath.row, все сворачивается (вместо 2 изображений, которые мне нужны, все изображения заменяются, и они продолжают увеличиваться, когда я прокручиваю tableView). Пожалуйста, объясните мне, как получить изображение внутри ячейки. заранее спасибо

var imageList = [UIImage]()
func getData()
    {
        Data = NSMutableArray()
        Data = ModelManager.getInstance().getAllData(planID)
        let count = Data.count
        for i in 0...count-1{
            let demoPlan = (Data.object(at: i) as! workoutPlan)
            ImageDemo.append(demoPlan.Image)

        }
    }


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            let cell2:workoutplanCell = tableView.dequeueReusableCell(withIdentifier: "workoutplanCell") as! workoutplanCell
            cell2.planExerciseNameLabel.text = plan.Name

            if(plan.Image.contains("plank")){
                cell2.timerButton.isHidden = false
            }
            else{
                cell2.timerButton.isHidden = true
            }

            var new_imgList = [String]()
            new_imgList.append(ImageDemo[indexPath.row])
            new_imgList.append(ImageDemo[indexPath.row] + "1")

let storage = Storage.storage().reference()

            for x in new_imgList
            {
             let storageRef = storage.child("images/\(new_imgList[x]).jpg")
                storageRef.getData(maxSize: 1 * 1024 * 1024) { (data, error) in
                    if let error = error{
                        print(error.localizedDescription)
                        return
                    }
                    else{
                        self.imageList.append(UIImage(data: data!)!)

                    }
                    if  x == new_imgList{
                        cell2.planExerciseImage.animationImages = self.imageList
                        cell2.planExerciseImage.animationDuration = 2
                        cell2.planExerciseImage.startAnimating()

                        cell2.planDescription.delegate = self
                        cell2.planDescription.text = plan.Description
                        cell2.planDescription.sizeToFit()
                        cell2.planDescription.textColor = UIColor.black
                        self.imageList.removeAll()
                        new_imgList.removeAll()
                    }
                }

            }
           return cell2
        }
0
0
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, у вас есть эта проблема по двум причинам: Один из них - это прицел imageList. Вы определили его где-то в вашем ViewController, и каждый раз, когда устанавливается ячейка, она продолжает добавлять изображения.

И вторая причина, которая в некоторой степени связана с первой, - это if x == 1, я не вижу, чтобы этот оператор вызывается все время, следовательно, ваш imageList не будет очищен для каждой ячейки.

Удалите свой new_imgList из того места, где вы его объявили, и вместо этого объявите его здесь:

for x in new_imgList{

  // DECLARE new_imgList HERE

.....

}

и удалите строку self.imageList.removeAll().

Привет, спасибо за помощь, я редактировал код, теперь вы можете найти проблему

sathish kumar 13.09.2018 19:18

Я посоветовал вам, что делать, есть ли что-то непонятное?

Do2 13.09.2018 19:21

Да, братан, проблема была в области видимости переменной, и теперь она решена, спасибо.

sathish kumar 14.09.2018 07:08

Другие вопросы по теме