当我尝试运行我的代码时,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}}
答案 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: 0
:tableView
数据源运行良好且这是您的MoviewController.movies
问题。检查您的MovieController
下一步我需要查看MoviewController
内容。
答案 1 :(得分:0)
首先,您不需要在UItableViewController中创建已知的tablevew.delegate = self
,但这不是问题
您应该确保您的数据源MovieController.movies
在打电话之前有数据,只需在打电话之前打印电影
self.tableview.reloadData()
答案 2 :(得分:0)
有许多案例会阻止您调用cellForRowAt
。
如果您的数组MovieController.movies
有0个对象/元素,您在MovieController.movies.count
中返回numberOfRowsInSection
。
如果您已将UITableView放置在storyboard或xib中,并且由于任何原因您的UITableView没有足够的高度来显示您的内容,那么您的cellForRowAt
将永远不会被调用。在大多数情况下,高度为0。