从数据库中检索数据后重新加载UiTableView-Swift

时间:2018-10-24 01:27:18

标签: ios database uitableview asynchronous

仅在从数据库中加载数据后,如何重新加载UiTableView。我有一个数据源类,其中包含要加载所有数据的功能,并在将数据加载到数组中后存储数据。

当我使用Tableview访问数据时,尽管它不显示任何内容,因为Tableview在数据库返回其数据之前就已加载。加载数据的唯一方法是让我拥有一个手动重新加载表格视图的按钮。

一旦从数据库中填充了数据源对象中的数组,如何使表视图自动重新加载?

2 个答案:

答案 0 :(得分:3)

作为一个新的程序员,甚至花了我一段时间才学会了这一点,但是我只是意识到完成模块是路要走。仅在您的函数从数据库中提取完成后,它将执行一些指定的代码。在这种情况下,我可以从数据库中检索数据后更新表视图。这是一个例子。

函数定义:

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
})

完成块中的代码将在数据库调用完成后发生。

答案 1 :(得分:2)

为什么在填充数据后不只是调用tableView.reloadData()?它会重新填充整个表格(从技术上讲,它只会重新创建可见的单元格)。

重点是您的tableView:cellForRowAt:方法应具有访问数据的能力,以便根据该数据适当地填充每个表单元格。每当您的数据更改时,只需再次调用tableView的reloadData()。这样做的效率很高,因为只会创建可见的单元格,其余的将在它们将变为可见时创建(如果有的话)。

此外,tableView:numberOfRowsInSection:同样应该查看您的数据以判断应存在多少行。每次调用reloadData()时也会再次调用它。

您的数据应始终准备好由tableView委托方法进行查询,即使该数据尚不包含任何内容。如果没有数据,则tableView:numberOfRowsInSection:将决定应该有0行。