Ios Swift-如何基于异步下载的数据创建表视图?

Ios Swift-如何基于异步下载的数据创建表视图?,ios,cocoa-touch,swift,Ios,Cocoa Touch,Swift,我的应用程序从web下载json,用PIN绘制地图,并在表视图中显示数据 Map不是问题,因为我编写自定义函数来绘制Map,并在dispatch\u async(dispatch\u get\u main\u queue()行之后立即调用它,该行工作正常-Map正在等待下载数据。但是,当我想对table view执行相同操作时,问题就出现了 我的代码相当长,因此我将只展示一些简短的代码片段,以了解问题的含义 我尝试了以下修改: dispatch_async(dispatch_get_ma

我的应用程序从web下载json,用PIN绘制地图,并在表视图中显示数据

Map不是问题,因为我编写自定义函数来绘制Map,并在dispatch\u async(dispatch\u get\u main\u queue()行之后立即调用它,该行工作正常-Map正在等待下载数据。但是,当我想对table view执行相同操作时,问题就出现了

我的代码相当长,因此我将只展示一些简短的代码片段,以了解问题的含义

我尝试了以下修改:

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
                // Do any additional setup after loading the view, typically from a nib.
                self.tableView.backgroundColor = UIColor.clearColor();
                self.tableView.delegate = self;
                self.tableView.dataSource = self;
但不幸的是,它没有任何帮助-在下载数据之前再次加载表视图,从而导致空表

表视图使用其自己的预定义功能,例如:

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
如果没有错误,将它们放入异步任务中是不可能的

我的问题是:如何处理这类事情(我的意思是当您需要一个元素,如表视图“wait”,等待首先下载数据,而您不能将其放入下载任务中时)


我希望我能够相对清楚地说明问题,这要提前感谢

表视图通过委托和数据源工作。通过设置这些属性,您可以告诉表视图在何处报告事件,以及在何处查找其数据

因为这些方法是由表视图“调用”的(或者至少是由UI线程发送的),所以您不会直接运行它们。相反,您要做的是设置委托和数据源(正如您所做的那样),然后调用表视图本身的方法来告诉它何时检查新数据

特别是,您应该看看。您可以通过异步调度
self.tableView.reloadData()
(前提是您的应用程序的其余部分知道您识别的回调方法中的新数据)


基本思想是,您的
UITableViewDataSource
知道如何使用某些数据结构中的信息填充表视图(例如,您可能有一个数组作为属性)

当基础数据发生更改时(例如,因为您从web下载了某些内容),您可以更改此数据结构(例如,替换数组),并告诉表视图的相应部分重新加载


然后将调用各种
UITableViewDataSource
方法,这些方法将用新数据重新填充表视图。

请注意,在后台线程上获取数据时,必须确保调用“reloadData”在主线程上。谢谢,我将阅读有关重新加载tableview数据的内容。此外,我忘了提到我创建了全局变量,这些变量保存从json获得的数组,因此我想重新加载可能会解决问题。这将是关于加载某种默认的tableview,然后用下载的数据重新加载它们,我明白了吗是的,基本上是这样。我编辑了一个高级描述。我只添加了单行self.tableView.reloadData()在发送之后,我所有的问题都消失了,谢谢!我注意到一个奇怪的事实:当我在我的表视图中使用自定义单元格时,程序崩溃了。
code
let cell:CustomCell?=self.tableView.dequeueReusableCellWithIdentifier(“cell”)作为CustomCell?cell?.backgroundColor=UIColor.orangeColor()返回单元格!
code
错误为:EXC\u断点I386\u BPT