Перезагрузить UiTableView после того, как данные были получены из базы данных - Swift - PullRequest
0 голосов
/ 24 октября 2018

Как перезагрузить UiTableView только после того, как данные были загружены из базы данных.У меня есть класс источника данных, который содержит функцию для загрузки всех данных, и сохраняет данные после того, как они были загружены в массив.

Когда я получаю доступ к данным, используя просмотр таблицы, он ничего не отображает, потому что просмотр таблицы загружается до того, как база данных вернула свои данные.Единственный способ загрузить данные - это иметь кнопку, которая вручную перезагружает представление таблицы.

Как заставить таблицу автоматически перезагружаться после заполнения массива в объекте источника данных из базы данных?

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Будучи новым программистом, мне потребовалось некоторое время, чтобы понять, что это даже возможно, но я просто понял, что блоки завершения - это путь.Он будет выполнять определенный код только после того, как ваша функция закончит выборку из базы данных.В этом случае я могу обновить табличное представление ПОСЛЕ того, как я получил данные из базы данных.Вот пример.

Определение функции:

func getDataFromDatabase(someInput: Any, completion: @escaping(String?) -> Void) {
    let retrievedData: String = databaseCallFunction()        
    // 'Get data from database' code goes here
    // In this example, the data received will be of type 'String?'
    // Once you've got your data from the database, which in this case is a string
    // Call your completion block as follows
    completion(retrievedData)
}

Как вызвать функцию:

getDataFromDatabase(someInput: "Example", completion: { (data) in 
    // Do something with the 'data' which in this example is a string from the database
    // Then the tableview can be updated
    let tableView.title = data
    tableView.reloadTableView
})

Код в блоке завершения будет выполняться ПОСЛЕ вызова базы данныхзавершено.

0 голосов
/ 24 октября 2018

Почему бы просто не вызвать tableView.reloadData () после заполнения данных?Он заново заполнит всю таблицу (технически он будет воссоздавать только те клетки, которые видны).

Дело в том, что ваш метод tableView: cellForRowAt: должен иметь возможность доступа к вашим данным, чтобызаполните каждую ячейку таблицы соответствующим образом на основе этих данных.Каждый раз, когда ваши данные изменяются, просто вызовите reViewData () tableView снова.Это эффективно в том смысле, что будут создаваться только видимые ячейки, а остальные будут создаваться всякий раз, когда они собираются стать видимыми, если вообще когда-либо.

Кроме того, tableView: numberOfRowsInSection: аналогичным образом должен анализировать ваши данные, чтобы судитьсколько строк должно существовать.Он также будет вызываться снова при каждом вызове reloadData ().

Ваши данные всегда должны быть готовы к опросу методами делегата tableView, даже если они еще ничего не содержат.Когда данных нет, ваш tableView: numberOfRowsInSection: решит, что должно быть 0 строк.

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