Hey all,
I want to fill an UITable with data from a json request. When i create a static table with predefined values i get a response just fine but when i use the json response i get no output in my table. I can print the values just fine so my json request works.
This is my code
struct Todolist: Codable {
let todo: [Todo]}
struct Todo: Codable {
let id: String
let title: String
let done: String
}class CompetencesController: UITableViewController {
let cellID = "cellID" var list = ["I", "Dont", "Get", "It"] var show: [AnyObject] = [] override func viewDidLoad() { super.viewDidLoad() let myUrl = URL(string: "https://gipaa.nl/app/test.php"); var request = URLRequest(url:myUrl!) request.httpMethod = "POST"// Compose a query string let accessToken: String? = KeychainWrapper.standard.string(forKey: "token") let userId: String? = KeychainWrapper.standard.string(forKey: "id") let postString = "userId=\(userId!)&token=\(accessToken!)"; request.httpBody = postString.data(using: String.Encoding.utf8); let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in if error != nil { print("error=\(error)") return } // You can print out response object // print("response = \(response)") //Let's convert response sent from a server side script to a NSDictionary object: do { let decoder = JSONDecoder() let response = try decoder.decode(Todolist.self, from: data!) let size = response.todo.count for (index, test) in response.todo.enumerated() { self.show.append(test.title as AnyObject) } print(self.show.count) print(self.show) } catch { print(error) } } task.resume() view.backgroundColor = .white tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellID) } // Uncomment this block of code to achieve alternating cell colors. // override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { // if indexPath.row % 2 == 0 { // let altCellColor: UIColor? = UIColor(white: 0.7, alpha: 0.5) // cell.backgroundColor = altCellColor // } // } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.show.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell: UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: cellID) cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellID) cell?.selectionStyle = .none cell?.textLabel?.text = show[indexPath.row] as! String return cell! } override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { self.show.remove(at: indexPath.row) self.tableView.deleteRows(at: [indexPath], with: .fade) } } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // let newVC = NewViewController() // navigationController?.pushViewController(newVC, animated: true) let cell = tableView.cellForRow(at: indexPath) print(cell?.detailTextLabel?.text ?? "") }
}
When i do
print(self.show.count)
print(self.show)
Printed Response:
6
[Loftdeur, test, test, test, test, test]
when i change to a static array i get my cells outputted.
return list.count
cell?.textLabel?.text = list[indexPath.row] as! String
What am i doing wrong here? Any help would be appriciated