Проблема с отображением представления коллекции в ячейке табличного представления в iOS - PullRequest
1 голос
/ 14 июня 2019

У меня есть табличное представление, и я поместил коллекционное представление внутри ячейки, я получаю данные из API, и эти данные я передаю в табличное представление и коллекционное представление, но при запуске приложения происходит сбой с этой ошибкой

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [Lawon.KnowledgeVC collectionView: numberOfItemsInSection:]: нераспознанный селектор, отправленный экземпляру 0x7fa90af0cbc0

Мой код для просмотра таблицы,

extension KnowledgeVC : UITableViewDelegate,UITableViewDataSource {

func numberOfSections(in tableView: UITableView) -> Int {
    return categoryArray.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return categoryArray.count
}


func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 35
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = Bundle.main.loadNibNamed("KnowledgeHeaderTVC", owner: self, options: nil)?.first as! KnowledgeHeaderTVC

    headerView.categoryNameLbl.text = categoryArray[section].catName
    headerView.articlesLbl.text = "\(categoryArray[section].blogArray.count)" + "articles"

    return headerView
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = knowledgeTableView.dequeueReusableCell(withIdentifier: "KnowledgeCell", for: indexPath) as! KnowledgeDetailTVC

    cell.categoryArray = categoryArray

    return cell
 }
}

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

class KnowledgeDetailTVC: UITableViewCell,UICollectionViewDelegate, UICollectionViewDataSource {

@IBOutlet weak var categoryCollectionView : UICollectionView!
var categoryArray = [Category]()

override func awakeFromNib() {
    super.awakeFromNib()

    self.categoryCollectionView.reloadData()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    print(categoryArray[section].blogArray.count)
    return categoryArray[section].blogArray.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "familyCell", for: indexPath) as! FamilyCVC

    cell.categoryLbl.text = categoryArray[indexPath.section].blogArray[indexPath.row].articleTitle
    let imageUrl = categoryArray[indexPath.section].blogArray[indexPath.row].imageUrl!
    print(imageUrl)
    cell.categoryImage.sd_setImage(with: URL(string: imageUrl), placeholderImage: UIImage(named: "person.jpeg"))
    //            cell.bgView.layer.masksToBounds = true
    //            cell.bgView.layer.shadowColor = UIColor.black.cgColor
    //            cell.bgView.layer.shadowOpacity = 3
    //            cell.bgView.layer.shadowOffset = CGSize(width: -1, height: 1)
    //            cell.bgView.layer.shadowRadius = 2
    //            cell.bgView.layer.shouldRasterize = true

    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

}

}

1 Ответ

1 голос
/ 14 июня 2019

Вы можете установить делегат & источник данных для коллекции collectionView в ячейке прототипа равным KnowledgeVC в IB, пока реализация находится внутри ячейки, но вы должны установить их в awakeFromNib

self.categoryCollectionView.delegate = self
self.categoryCollectionView.dataSource = self
self.categoryCollectionView.reloadData()

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

cell.categoryArray = categoryArray
cell.categoryCollectionView.reloadData()

В этом случае не возникает ошибка времени компиляции, и это большая проблема установки делегата и источника данных в IB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...