请求完成后如何重新加载当前的ASCellNode?

时间:2020-08-04 16:26:11

标签: swift alamofire asyncdisplaykit

我有一个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
        }
    }

0 个答案:

没有答案