Ios 在完成块后调用CellForRow
我有一个功能,可以上网下载数据,然后将数据放入TableViewCell 我的问题是,CellForRow委托方法在应用程序从web获取数据之前被调用Ios 在完成块后调用CellForRow,ios,swift,Ios,Swift,我有一个功能,可以上网下载数据,然后将数据放入TableViewCell 我的问题是,CellForRow委托方法在应用程序从web获取数据之前被调用 那么,在从web获取数据后,我如何调用CellForRow委托方法呢?您的函数是否具有正确的完成块?听起来好像是在同步调用cellForRow,而发送下载的过程是异步的。我怀疑您的代码如下所示: // ... [self downloadMethod]; [self cellDelegateCall]; // ... 系统不知道下载方法需要多长
那么,在从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的工作原理,但我可以给您一个提示。您只需要在接收数据后重新加载表。就这些!