Сбой приложения в iPhone 6 при повторной загрузке данных

#ios #swift #uitableview #uicollectionview

#iOS #быстрый #uitableview uitableview #uicollectionview

Вопрос:

Я использую представление коллекции в боковой UITableViewCell при перезагрузке

 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        guard let _cell = cell as? BrandRow else { return }

        let _flow = columnLayout
        _flow.scrollDirection = .horizontal

        _cell.collectionView.collectionViewLayout = _flow
        _cell.collectionView.delegate = self
        _cell.collectionView.tag = indexPath.section
        _cell.collectionView.dataSource = self
        _cell.collectionView.showsVerticalScrollIndicator = false
        _cell.collectionView.showsHorizontalScrollIndicator = false
        _cell.collectionView.reloadData()

    }
 

В iPhone 6 при повторном использовании ячейки происходит сбой моего приложения

 _cell.collectionView.reloadData()
 

кто-нибудь может, пожалуйста, сообщить мне, что не так с моим кодом?

Ошибка

Ошибка утверждения в -[UICollectionViewData validateLayoutInRect:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-3698.140/UICollectionViewData.m:447

2021-01-28 17:10:08.921104 0500 Okayhai[630:48362] *** Завершение работы приложения из-за неперехваченного исключения ‘NSInternalInconsistencyException’, причина: ‘UICollectionView получил атрибуты макета для ячейки с несуществующим путем к индексу: <NSIndexPath: 0xec57a98e0a4dfaae> {длина = 2, путь = 0 -4}’

Комментарии:

1. Код, который задает индикаторы макета, делегирования и прокрутки, должен быть в другой функции, которая запускается только один раз. Что такое сообщение о сбое / исключении?

2. проверьте ошибку, о которой я упоминал в запросе.

3. willDisplayCell это не самое подходящее место для запуска этого кода. Одноразовая настройка, которую вы должны выполнить в init методе. Другой код должен быть в вашем cellForRowAt . tag Также лучше избегать хранения данных indexpath. Это может вызвать проблемы, если ваша таблица допускает изменение порядка ячеек или вставку / удаление.

Ответ №1:

попробуйте это:
ниже _cell.collectionView.reloadData()

поместите

 _cell.collectionView.collectionViewLayout.invalidateLayout()
 

Комментарии:

1. я уже использовал его, но в моем случае он не работает.