gpt4 book ai didi

ios - UICollectionView 内的 UITableView -> [错误] 展开 tableView 时意外发现 nil

转载 作者:行者123 更新时间:2023-11-30 12:52:16 24 4
gpt4 key购买 nike

我在 UICollectionView 的每个单元格内都有一个 UITableView。

我将 TableView 引用到 FeedCell 类,该类是 Collection View 中每个单元格的类。但是,我收到错误消息

fatal error: unexpectedly found nil while unwrapping an Optional value

当尝试访问 FeedCell 类中的 tableView 对象时。我三次检查是否正确引用了 Storyboard中的表格 View ,所以我假设还有其他原因导致它为零,但我不确定它是什么。有人知道如何解决这个问题吗?

这是我的 VC, Collection View 和 TableView 都位于其中。

class HomeViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate,UICollectionViewDelegateFlowLayout, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.isTranslucent = false
collectionView.register(FeedCell.self, forCellWithReuseIdentifier: "FeedCell")
}

// for feedcell and its collection view
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "FeedCell", for: indexPath) as! FeedCell
cell.backgroundColor = backgrounds[indexPath.row]
return cell
}

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
guard let collectionViewCell = cell as? FeedCell else { return }

collectionViewCell.setTableViewDataSourceDelegate(dataSourceDelegate: self, forRow: indexPath.row)
}


func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {

return CGSize(width: view.frame.width, height: view.frame.height)
}

// conform to tableview protocol for hometable
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return images[tableView.tag].count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HomeCell", for: indexPath)
cell.imageView?.image = images[tableView.tag][indexPath.item]
return cell
}


override func viewWillAppear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(true, animated: animated)
super.viewWillAppear(animated)
}

override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(false, animated: animated)
super.viewWillDisappear(animated)
}


}

这是 Collection View 的一个单元格,我在其中引用 TableView 。

class FeedCell: BaseCollectionViewCell{

@IBOutlet weak var tableView: UITableView!
override func setupViews() {
super.setupViews()
}

func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 4
}

}


extension FeedCell {

func setTableViewDataSourceDelegate
<D: UITableViewDataSource & UITableViewDelegate>
(dataSourceDelegate: D, forRow row: Int) {

# ERROR!
tableView.delegate = dataSourceDelegate
tableView.dataSource = dataSourceDelegate
tableView.tag = row
tableView.reloadData()
}

}

最佳答案

在这一行:

 (dataSourceDelegate: D, forRow row: Int)

将其转换为变量:D

改用这个:

tableView.dataSource = D
tableView.delegate = D

关于ios - UICollectionView 内的 UITableView -> [错误] 展开 tableView 时意外发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40814198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com