我有一个ASCellNode,它在表格单元格的顶部有一个视频节点。这些视频是通过在线网址播放的。该应用程序通过Alamofire的请求接收网址。我得到的问题是,一旦Alamofire从请求中获得url,就已经太迟了,因为nodeforblockat已经返回并且Alamofire是异步的,因此该单元直到很晚才得到url。无论如何,有没有要重新加载当前单元格以便它接收url的信息?
我尝试在Alamofire收到结果后放入表重载,但这会导致无限循环。我还考虑过尝试使请求同步,但是意识到这是实现此请求的一种不好方法。
这是我的 nodeblockforrowat (此代码块之外还有一个名为videoUrl的变量)
func tableNode(_ tableNode: ASTableNode, nodeBlockForRowAt indexPath: IndexPath) -> ASCellNodeBlock {
let video = self.videos[indexPath.row].id
// Send the request (moved it here to take longer)
AF.request("http://localhost/videos/\(video).json").responseJSON { response in
var JSON: [String: Any]?
do {
JSON = try JSONSerialization.jsonObject(with: response.data!, options: []) as? [String: Any]
guard let url = JSON!["url"] as? String else { return }
self.videoUrl = url
} catch {
return
}
}
let videoUrl = URL(string: self.videoUrl)
return {
let node = PostCellNode(with: videoUrl!)
node.debugName = "Node \(indexPath.row)"
return node
}
}