Установка источника данных UITableView программно делает его перезагрузить таблицу асинхронно - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу позвонить tableView.reloadData() и быть уверенным, что после этой таблицы будут отображены строки.Проблема в том, что этого не происходит, когда я устанавливаю источник данных программно до этого.Пример:

class ViewController: UIViewController, UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        tableView.reloadData()
        print("after reloadData")
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        print("cellForRowAt")
        return UITableViewCell()
    }
}

Вывод: 1. print ("after reloadData") 2. print ("cellForRowAt")

Я ожидаю, что сначала будет напечатан "cellForRowAt".Почему это происходит?

Обновление: это глупо, но я думал, что reloadData () был синхронным.Что мне помогло: self.tableView.layoutIfNeeded () Спасибо и спасибо этому парню .

1 Ответ

0 голосов
/ 25 сентября 2019

Функция tableView.reloadData() является асинхронной и содержит патч вызовов методов dataSource, чтобы до тех пор, пока это не произойдет, вы сначала увидите печать

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