Количество секций в табличном представлении не равно тому, что я установил.

Код очень прост: класс клиента ChecklistViewController унаследован от UITableViewController. Исходный код Swift связан с tableViewController в раскадровке с нетронутой ячейкой прототипа по умолчанию.

class ChecklistViewController: UITableViewController {

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 10 // I set 10 sections here
    }

    override func viewDidAppear(_ animated: Bool) {
        let tableView = UITableView()
        print("\(tableView.numberOfSections)")// prints out "1" ???
    }

}

Проблема:

Я попросил функцию источника данных создать 10 разделов для табличного представления, а позже он сказал, что табличное представление имеет только 1 раздел в функции viewDidAppear. Разве 10 не должно печатать? почему 1?

Спасибо за ваше время и помощь


person SLN    schedule 18.06.2017    source источник
comment
let tableView = UITableView(), это совершенно новый объект (хотя, поскольку у вас есть UITableViewController, у вас уже есть UITableView, а numberOfSections(in tableView:) еще не был вызван до reloadData() $   -  person Larme    schedule 18.06.2017
comment
@Larme Я изменил код внутри viewDidAppear на print (self.numberOfSections (in: self.tableView)), и проблема решена   -  person SLN    schedule 18.06.2017


Ответы (1)


Вы напрасно создаете новую пустую таблицу без источника данных или делегата. Затем вы спрашиваете эту ненужную таблицу, сколько в ней секций. Поскольку у него нет источника данных, он возвращает значение по умолчанию, равное 1 разделу.

Вместо того, чтобы создавать дополнительное табличное представление, ссылайтесь на правильное табличное представление, созданное контроллером табличного представления.

Измените viewDidAppear на:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    print("\(self.tableView.numberOfSections)")
}

Теперь это будет иметь доступ к реальному табличному представлению, которое создается контроллером табличного представления. Это должно дать правильный результат 10.

Обратите внимание, что self. на самом деле не требуется. Я поместил это здесь, чтобы прояснить, на какой tableView идет ссылка.

person rmaddy    schedule 18.06.2017