Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TableView not displaying text with JSON data from API call

I connected to API using Alamofire and SwiftyJson.

I got this JSON return:

{
"contacts": [
        {
                "id": "c200",
                "name": "Ravi Tamada",
                "email": "[email protected]",
                "address": "xx-xx-xxxx,x - street, x - country",
                "gender" : "male",
                "phone": {
                    "mobile": "+91 0000000000",
                    "home": "00 000000",
                    "office": "00 000000"
                }
        },
        {
                "id": "c201",
                "name": "Johnny Depp",
                "email": "[email protected]",
                "address": "xx-xx-xxxx,x - street, x - country",
                "gender" : "male",
                "phone": {
                    "mobile": "+91 0000000000",
                    "home": "00 000000",
                    "office": "00 000000"
                }
        },
        {
                "id": "c202",
                "name": "Leonardo Dicaprio",
                "email": "[email protected]",
                "address": "xx-xx-xxxx,x - street, x - country",
                "gender" : "male",
                "phone": {
                    "mobile": "+91 0000000000",
                    "home": "00 000000",
                    "office": "00 000000"
                }
        }
 ]
}

This is my ViewController code:

import UIKit
import Alamofire
import SwiftyJSON

class ViewController:UIViewController {
    @IBOutlet weak var tblJSON: UITableView!

    var arrRes = [[String : AnyObject]]()

    override func viewDidLoad() {
        super.viewDidLoad()
        getRequest()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func getRequest() {
        Alamofire.request("http://api.androidhive.info/contacts").responseJSON { (responseData) -> Void in
            if ((responseData.result.value) != nil) {
                let swiftyJsonVar = JSON(responseData.result.value!)

                if  let resData = swiftyJsonVar["contacts"].arrayObject {
                    self.arrRes = resData as! [[String : AnyObject]]
                }

                if self.arrRes.count > 0 {
                    self.tblJSON.reloadData()
                }
            }
        }
    }

    //MARK: tableView
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrRes.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
        var dict = arrRes[indexPath.row]
        cell.textLabel?.text = dict["name"] as? String
        cell.detailTextLabel?.text = dict["email"] as? String
        return cell
    }

}


I have trouble displaying result on the UITableView. Can anyone help me? Thanks!

like image 901
kukhtoa Avatar asked Nov 11 '16 18:11

kukhtoa


1 Answers

You need to implement UITableViewDataSource and UITableViewDelegate like this

class ViewController:UIViewController, UITableViewDataSource, UITableViewDelegate 

and in viewDidLoad you need to assign DataSource and Delegate to your tableView like this

override func viewDidLoad() {
    super.viewDidLoad()
    tblJSON.dataSource = self
    tblJSON.delegate = self
    getRequest()
}
like image 127
Rajat Avatar answered Nov 20 '22 15:11

Rajat