当前位置: 首页 > 面试题库 >

在以异步方法准备数据之后,如何为表视图重新加载数据

商运锋
2023-03-14
问题内容

我用来URLSession从用于tableview的数据的资源API中获取数据。所以我需要reloadData()在URLSession任务准备好数据之后。但这会导致

UITableView.reloadData()必须仅在主线程中使用

当我运行该应用程序时,一开始的表视图为空白。只有在我滚动屏幕之后,数据才会显示。但是,如果未reloadData()在URLSession任务中调用,则屏幕始终是空白的。

func getData() {
    let dataUrl = URL(string: "http://www.example.com/app/?json=1")
    let task = URLSession.shared.dataTask(with: dataUrl! as URL) {data, response, error in
        guard let data = data, error == nil else { return }
        do {
            self.data = try JSONSerialization.jsonObject(with: data, options: []) as! [String:Any]
            self.tableView.reloadData()
            }

        } catch let error {
            print(error)
        }
    }
    task.resume()
}

问题答案:

您永远不要从后台线程访问任何UI,而必须从主线程访问它,为此,您可以使用gcd:

DispatchQueue.main.async {
    self.tableView.reloadData()
}

从后台线程访问UI(读取UIKit的所有内容)有时可能会起作用,但最终会遇到bug,包括崩溃,显示爆炸或gazenbug。



 类似资料:
  • Highcharts 曲线图 以下实例演示了异步加载数据曲线图表。这边我们通过 jQuery.getJSON() 方法从异步加载 csv 文件: 我们在前面的章节已经了解了 Highcharts 配置语法。接下来让我们来看个完整实例: 导入 data.js 文件 异步加载数据需要引入以下js 文件: <script src="http://code.highcharts.com/modules/d

  • 我从这个问题中编辑了一个柱塞

  • 问题内容: 我有一个像这样初始化的数据表: 以后我想做 它工作正常,但现在我想在该请求中发送一些参数。这些参数仅在重新加载时才需要,而在表的初始化中则不需要。我怎么做?谢谢! 问题答案: 选项1- 使用preXhr.dt事件。 看到这里http://datatables.net/reference/event/ 选项2(首选) -使用ajax.data函数。 两种选择都会产生相同的结果。您的服务器

  • 问题内容: 如何在我的表格视图中重新加载单元格的数据?我想向我的服务器发出请求,并且服务器响应JSON。目前,我实现了请求和响应处理,并且可以在单元格中显示数据。但是我希望服务器仅响应十个数据集。当我滚动到带有应用程序中十个单元格的表格视图的末尾时,我想向服务器发出下一个请求,服务器将提供接下来的十个数据集,依此类推。我使用Swift作为编程语言。 谢谢! 问题答案: 您可以使用以便重新加载整个表

  • 我试图加载新数据(隐藏特定的图形),我试图函数像这里,但它不工作,我不知道我错过了什么。 我想加载一个数据(两个),但我想选择哪一个可见。 HTML JavaScript 小提琴连杆

  • 主要内容:echarts_test_data.json 数据:,实例,实例,实例ECharts 通常数据设置在 setOption 中,如果我们需要异步加载数据,可以配合 jQuery等工具,在异步获取数据后通过 setOption 填入数据和配置项就行。 ECharts 通常数据设置在 setOption 中,如果我们需要异步加载数据,可以配合 jQuery等工具,在异步获取数据后通过 setOption 填入数据和配置项就行。 json 数据: echarts_test_