Функция указателя пути cellForRowAt не вызывается - PullRequest
0 голосов
/ 06 мая 2018

Когда я пытаюсь запустить свой код, функция cellForRowAtIndexPath по какой-то причине не запускается.

Функция numberOfSections работает отлично. Я думал, что это была функция 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
    }

Ответы [ 3 ]

0 голосов
/ 06 мая 2018

Сначала вам не нужно делать tablevew.delegate = self в UItableViewController, это уже известно, но это не проблема

Вы должны убедиться, что ваш источник данных MovieController.movies иметь данные, прежде чем позвонить, просто напечатайте фильмы, прежде чем позвонить

self.tableview.reloadData()
0 голосов
/ 06 мая 2018

Есть ряд случаев, которые мешают вашему cellForRowAt быть вызванным.

  1. Если ваш массив MovieController.movies имеет 0 объектов / элементов, которые вы возвращаете как MovieController.movies.count в вашем numberOfRowsInSection.

  2. Если вы поместили свой UITableView в раскадровку или XIB, и по какой-либо причине ваш UITableView не набрал достаточную высоту, чтобы показать ваш контент, в этом случае ваш cellForRowAt никогда не будет вызываться. В большинстве случаев высота равна 0.

0 голосов
/ 06 мая 2018

Отладка печати

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.

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