我试图通过segue传递一些数组但在此之前我必须运行简单的for循环但我有一个问题。对于每次迭代,我都需要执行具有网络和异步的功能。完成后,它必须将String附加到数组,并在for循环结束后,传递segue上的数据。
我有一个问题,因为在尝试这个时,我会因为没有传递数据而崩溃,并且在新控制器上是nil。我假设,我需要使用GCD或类似的东西,以便在完成并传递数据时通知。
我先尝试了什么:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedStory = stories[indexPath.row]
for chapter in (selectedStory?.chapters)! {
DataService.instance.retrieveUsername(forID: chapter.author) { (returnedUsernamed) in
self.selectedStoryChapterAuthors?.append(returnedUsernamed)
}
}
self.performSegue(withIdentifier: "goToStory", sender: self)}
我是如何尝试使用DispatchGroup的,但没有工作:
let dispatchGroup = DispatchGroup()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedStory = stories[indexPath.row]
for chapter in (selectedStory?.chapters)! {
dispatchGroup.enter() // Enter the dispatch group
DataService.instance.retrieveUsername(forID: chapter.author) { (returnedUsernamed) in
self.selectedStoryChapterAuthors?.append(returnedUsernamed)
self.dispatchGroup.leave()
}
}
dispatchGroup.notify(queue: DispatchQueue.main, execute: {
self.performSegue(withIdentifier: "goToStory", sender: self)
}) }
对此有何想法?如果需要更多信息/代码,请知道。
答案 0 :(得分:0)
好的,我找到了一些有帮助的解决方案。 我基本上在第二个视图控制器中运行循环,使其工作的主要功能是添加
DispatchQueue.main.async {
// cell configuration
}
在CellForRow方法中。
感谢您的投入!