Раздел заголовка в контроллере uicollectionview. вне зоны доступа

Я использую viewForSupplementaryElementOfKind Функция для применения раздела заголовка из uicollectionview контроллер. Однако перед асинхронным разбором viewDidAppear API, индекс строки загружается в viewForSupplementaryElementOfKind функция и становится вне диапазона. Что я должен делать?

Вот мой код...

    override func viewDidAppear(_ animated: Bool) {
        callVideo3API()
    }

    override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

        switch kind {

        case UICollectionElementKindSectionHeader:
            let row1 = self.list[0]
            let row2 = self.list[1]
            let row3 = self.list[2]

    let headerSection = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "Header", for: indexPath) as! HeaderSection


        headerSection.nameLabel01.text = row1.nickname
        headerSection.nameLabel02.text = row2.nickname
        headerSection.nameLabel03.text = row3.nickname


        return headerSection

    default:

        assert(false, "Unexpected element kind")
    }
}

1 ответ

Решение

Вы должны подождать, пока callVideo3API() закончить После успешного завершения callVideo3API() Вы можете перезагрузить представление коллекции, чтобы получить вывод. Пожалуйста, следуйте инструкциям ниже

  1. Метод вызова callVideo3API()
  2. Делать CollectionView пусто, возвращая ноль через CollectionView DataSource [func numberOfSections(in collectionView: UICollectionView) -> Int, func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int ]
  3. (Необязательно) На время callVideo3API() выполнение вы можете показать индикатор активности на месте вашего CollectionView
  4. После успешного завершения callVideo3API() вы можете перезагрузитьCollectionView с соответствующим значением источника данных. На этот раз он будет работать без ошибок:-) (Если вы поставили индикатор активности, не забудьте удалить после успешного вызова API)
Другие вопросы по тегам