Vicky Arora
Vicky Arora

Reputation: 501

iOS Swift get JSON data into tableView

I have a JSON Data which I want to get into UITable. The data is dynamic so table should update every time view loads. Can anyone help?

{
data =     (
                {
            id = 102076330;
            name = "Vicky Arora";
        }
    )
}

Upvotes: 0

Views: 684

Answers (3)

Bhavin Bhadani
Bhavin Bhadani

Reputation: 22364

try this....

When you receive response,get the whole array of dictionary

if let arr = response["data"] as? [[String:String]] {
      YourArray = arr  
      // Define YourArray globally
}  

Then in tableview cell,cellForRowAtIndexPath method

if let name = YourArray[indexpath.row]["name"] as? String{
      label.text = name
}
//Same You can done with id 

And don't forget to set number of rows

 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return YourArray.count
}

Upvotes: 1

Nurdin
Nurdin

Reputation: 23883

Try this one. But this sample i'm using Alamofire and SwitfyJSON. Import it using CocoaPod.

import UIKit
import Alamofire

class TableViewController: UITableViewController{

    var users: [JSON] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(.GET, "http://xxxxx/users.json").responseJSON { (request, response, json, error) in
            if json != nil {
                var jsonObj = JSON(json!)
                if let data = jsonObj["data"].arrayValue as [JSON]?{
                    self.users = data
                    self.tableView.reloadData()
                }
            }
        }
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Potentially incomplete method implementation.
        // Return the number of sections.
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete method implementation.
        // Return the number of rows in the section.
        return users.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("UserCell", forIndexPath: indexPath) as! UITableViewCell
        let user = users[indexPath.row]
        if let idLabel = cell.viewWithTag(100) as? UILabel {
            if let id = user["id"].string{
                idLabel.text = id
            }
        }

        if let nameLabel = cell.viewWithTag(101) as? UILabel {
            if let name = user["name"].string{
                nameLabel.text = name
            }
        }

        return cell
    }

}

Upvotes: 1

Nikita P
Nikita P

Reputation: 4246

If you are up to using Core Data, I would suggest using the NSFetchedRequest.

Every time you are getting the data from the server, save it to Core data, and that will automatically update the table view.

Here is a tutorial from Ray Wenderlich

Upvotes: 0

Related Questions