Ios 在完成块后调用CellForRow

Ios 在完成块后调用CellForRow,ios,swift,Ios,Swift,我有一个功能,可以上网下载数据,然后将数据放入TableViewCell 我的问题是,CellForRow委托方法在应用程序从web获取数据之前被调用 那么,在从web获取数据后,我如何调用CellForRow委托方法呢?您的函数是否具有正确的完成块?听起来好像是在同步调用cellForRow,而发送下载的过程是异步的。我怀疑您的代码如下所示: // ... [self downloadMethod]; [self cellDelegateCall]; // ... 系统不知道下载方法需要多长

我有一个功能,可以上网下载数据,然后将数据放入TableViewCell

我的问题是,CellForRow委托方法在应用程序从web获取数据之前被调用


那么,在从web获取数据后,我如何调用CellForRow委托方法呢?

您的函数是否具有正确的完成块?听起来好像是在同步调用
cellForRow
,而发送下载的过程是异步的。我怀疑您的代码如下所示:

// ...
[self downloadMethod];
[self cellDelegateCall];
// ...
系统不知道下载方法需要多长时间,所以它会立即执行cellDelegateCall。您需要的是一个适当的完成块:

// ...
[self downloadMethodWithCompletion:^(BOOL successful) {
    if (successful) {
        [self cellDelegateCall];
    }
}];
// ...

一开始,熟悉编写自己的代码块可能会让人困惑。这是一个巨大的资源。即使在写了几年的积木之后,我仍然发现自己不时地检查它。希望这有帮助

关于
cellForRow
有一件事需要习惯,那就是您通常不会直接调用它。只需知道它会在不同的时间被触发,比如在视图控制器中首次绘制表格时,以及表格需要新单元格时。正如其他人所说,如果确实需要触发
cellForRow
,请调用
tableView.reloadData()

无需显式调用cellForRow delegate,您只需在收到数据后重新加载表视图,它将调用
cellForRow
delegate

Swift 2.3:

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
    self.tableView.reloadData()
     })
    DispatchQueue.main.async{
    self.tableView.reloadData()
    }
Swift 3:

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
    self.tableView.reloadData()
     })
    DispatchQueue.main.async{
    self.tableView.reloadData()
    }

从web下载数据后,需要在tableView上调用
reloadRowsAtIndexPaths

您是否尝试了table reloadData方法来刷新表检索数据后,必须在异步块中重新加载表的数据。如果您仍然有问题,我建议您发布代码。您可以更快地提出请求,或者在请求的完成块中调用
reloadTableView
。我不知道swift的工作原理,但我可以给您一个提示。您只需要在接收数据后重新加载表。就这些!