cellForRowAt未调用索引路径函数

时间:2018-05-06 04:14:33

标签: ios swift uitableview

当我尝试运行我的代码时,dataSource/delegate函数由于某种原因无法运行。

import UIKit class MoviesTableViewController: UITableViewController { @IBOutlet weak var searchBar: UISearchBar! override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self MovieController.getAllMovies(name: "blue") { (sucess) in if sucess { DispatchQueue.main.async { self.tableView.reloadData() } } } tableView.reloadData() } override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return MovieController.movies.count } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 148 } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "movieCell", for: indexPath) as! MoviesTableViewCell let movie = MovieController.movies[indexPath.row] cell.movieRating.text = String(movie.vote_average) cell.movieRating.text = movie.overview cell.movieTitle.text = movie.title return cell } 功能完美无缺。我当时认为这是{{1}}函数或单元格的问题。

非常感谢找到这个问题的解决方案。

{{1}}

3 个答案:

答案 0 :(得分:0)

打印调试

override func numberOfSections(in tableView: UITableView) -> Int {
    print("Number of section called")
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    print("Number of rows in section called")
    print("Movies count: ", MovieController.movies.count)
    return MovieController.movies.count
}

如果Number of section called未打印到控制台:您遇到问题tableView而且DataSource

否则如果Movies Count: 0tableView数据源运行良好且这是您的MoviewController.movies问题。检查您的MovieController

下一步我需要查看MoviewController内容。

答案 1 :(得分:0)

首先,您不需要在UItableViewController中创建已知的tablevew.delegate = self,但这不是问题

您应该确保您的数据源MovieController.movies 在打电话之前有数据,只需在打电话之前打印电影

self.tableview.reloadData()

答案 2 :(得分:0)

有许多案例会阻止您调用cellForRowAt

  1. 如果您的数组MovieController.movies有0个对象/元素,您在MovieController.movies.count中返回numberOfRowsInSection

  2. 如果您已将UITableView放置在storyboard或xib中,并且由于任何原因您的UITableView没有足够的高度来显示您的内容,那么您的cellForRowAt将永远不会被调用。在大多数情况下,高度为0。