Данные Firebase не заполняют UICollectionView

Я новичок в этом, поэтому, пожалуйста, будьте осторожны со мной!

Моя проблема заключается в следующем:

Я пытаюсь заполнить представление прокрутки (UICollectionView) с данными из Firebase.

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

Проблема в том, что когда я пытаюсь вставить данные в представление прокрутки, он говорит, что данные находятся вне диапазона !!

Fatal error: Index out of range

Вот мой код:

Класс страницы:

 let imageName: UIImage
 let headerText: String
 let bodyText: String 

Вот viewDidLoad

override func viewDidLoad() {
        super.viewDidLoad()

        firebase()
        setupImages()
    }

Вот функция настройки изображения:

 func setupImages(){

        print(names[0])

        self.pages = [
            Page(imageName: self.image, headerText: "test", bodyText: "hehehehahaha"),

            Page(imageName: self.image, headerText: "test", bodyText: "test"),

            Page(imageName: self.image, headerText: "test", bodyText: "test"),

            Page(imageName: self.image, headerText: "test", bodyText: "test"),

            Page(imageName: self.image, headerText: "test", bodyText: "test"),
        ]

        self.collectionView?.backgroundColor = .white
        self.collectionView?.register(PageCell.self, forCellWithReuseIdentifier: "cellId")
        self.collectionView?.isPagingEnabled = true
    }

Я думаю, что проблема вызвана тем, что данные из базы данных не были получены достаточно быстро.

Я говорю это, потому что у меня есть другая функция в другом классе, которая, кажется, устанавливает это:

override init(frame: CGRect) {
        super.init(frame: frame)
        //setup layout sets up constraints for the layout of the page
        setupLayout()
    }

Добавление метода UICollectionViewDataSource:

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return pages.count
    }

и:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! PageCell

        let page = pages[indexPath.item]
        cell.page = page
        return cell
    }

Спасибо за чтение, любой способ, который может направить меня в правильном направлении, будет оценен!

Всего 1 ответ


Глядя на ваш код: вы используете self.pages в качестве источника данных. Я не вижу связи с Firebase в коде, который вы предоставили здесь.

Попробуйте изменить этот метод делегата, чтобы он использовал indexPath.row вместо indexPath.item.

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! PageCell

       // let page = pages[indexPath.item] change this to use indexPath.row
        let page = pages[indexPath.row]
        cell.page = page
        return cell
    }

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

cell.page = page

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


Есть идеи?

10000