Как перезагрузить текущий ASCellNode после завершения запроса? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть ASCellNode, и у него есть видеоузел поверх ячейки таблицы. Эти видео воспроизводятся с онлайн-адреса. Приложение получает URL-адрес через запрос в Alamofire. Проблема, которую я получаю, заключается в том, что как только Alamofire получает URL-адрес (из запроса), уже слишком поздно, потому что nodeforblockat уже вернулся, а Alamofire является asyn c, поэтому ячейка не получает URL-адрес намного позже. Есть ли способ перезагрузить текущую ячейку, чтобы она получила URL-адрес?

Я попытался перезагрузить таблицу после того, как Alamofire получит результат, но это вызывает бесконечное l oop. Я также рассматривал попытку сделать запрос синхронным, но понимая, что это плохой способ реализации этого.

Вот мой nodeblockforrowat (Существует также var за пределами этого блока кода называется 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
        }
    }
...