Json данные не отображаются в таблицеView swift 5 - PullRequest
0 голосов
/ 12 июля 2020

Я получил данные, и они отображаются при печати, но когда я пытаюсь отобразить их в виде таблицы. Ничего не происходит

Я размещаю tableview.reloadData не в том месте?

override func viewDidLoad() {
    super.viewDidLoad()
    fetchData()
    tableView.reloadData() 
}


func fetchData()
{     
    if let url = URL(string: urlConstant) {
       
        let session = URLSession(configuration: .default)
        let task = session.dataTask(with: url) { (data, res, err) in
       
            if err == nil
            {
                let decoder = JSONDecoder()
                if let safeData = data
                {
                    do{
                        let results = try decoder.decode(Results.self, from: safeData)
                        
                        guard let array = results.Result as? [Products] else {return }
                 
                        for product in array
                      {
    
                        self.productArray.append(product)
                        }
                     } catch {
                        print(error)
                    }                    
                }
            }
        }
        task.resume()            
    }
    
    self.tableView.reloadData()
}

1 Ответ

1 голос
/ 12 июля 2020

Если вы получаете правильный ответ (проверьте его один раз) от сервера, тогда вам нужно перезагрузить tableView после получения ответа от сервера и заполнения массива.

func fetchData() {
        if let url = URL(string: urlConstant) {
            let session = URLSession(configuration: .default)
            let task = session.dataTask(with: url) { (data, res, err) in
                if err == nil
                {
                    let decoder = JSONDecoder()
                    if let safeData = data
                    {
                        do{
                            let results = try decoder.decode(Results.self, from: safeData)
                            guard let array = results.Result as? [Products] else {return }
                            for product in array {
                              self.productArray.append(product)
                            }
                            // Reload table view here
                           DispatchQueue.main.async {
                            self.tableView.reloadData()
                          }
                        } catch {
                            print(error)
                        }
                    }
                }
            }
            task.resume()
        }
    }

Альтернативно, вы можете добавить завершение, обработанное в методе fetchData.

...