Sigmund
Sigmund

Reputation: 13

SWIFT Data in Table View not showing

I need help on how to solve this problem.

I tried to fetch data using json but when I tried to view in Table View its not showing.

I used the code below to test if table view is working and it works!

// self.clientList = ["Mango", "Banana", "Orange", "Guava", "Grapes"]

I used the code below to test if there's data returned from json. Still it works.

for item in jsonClientList {

  let firstName = item["firstName"]
   //Printing is working
  print(firstName  as! String)

}

Line not working! I dont know why. Its inside of loop but to data upon loading the table view.

Thanks in advance.

self.clientList.append(firstName as! String)

//---------------------------------


var clientList:[String] = []


func tableView(tableView: UITableView, numberOfRowsInSection section:    Int) -> Int {
    return self.clientList.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "tblClientList")
    cell.textLabel?.text = self.clientList[indexPath.row]
    return cell
}


internal func jsonParser() -> Void{

    //-------------------------

    let postEndpoint: String = "http://domain.com/client"
    let url = NSURL(string: postEndpoint)

    let session = NSURLSession.sharedSession()
    session.dataTaskWithURL(url!, completionHandler:
        {
            (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

            do{
                let ipString = NSString(data:data!, encoding: NSUTF8StringEncoding)
                if (ipString != nil) {
                    let jsonClientList = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray

                        for item in jsonClientList {
                            let firstName = item["firstName"]
//I tried to print the data from json and its working!
                         print(firstName  as! String)
//Line not working
//I tried to insert the firstName to clientList array
self.clientList.append(firstName  as! String)

                        }
                 }

                    //If I use this its working
                    //  self.clientList = ["Mango", "Banana", "Orange", "Guava", "Grapes"]

                }
            } catch{
                print("Something bad happed!")
            }
        }

        ).resume()
    //--------------


}
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    jsonParser()

}
//---------------------------------

Upvotes: 0

Views: 930

Answers (2)

Anbu.Karthik
Anbu.Karthik

Reputation: 82766

you forget to refresh the new data to show in table, do like

 self.clientList.append(firstName  as! String)
 }
dispatch_async(dispatch_get_main_queue()) 
self.yourtableViewname.reloadData()
} 

Upvotes: 4

vadian
vadian

Reputation: 285290

As mentioned in the other answer the issue is that the table view needs to be reloaded.

In Swift there is a more convenient way to populate the data source array without repeat loop using the map function.

It assumes – like in the question – that all dictionaries in jsonClientList contain a key firstName.

tableView is the name of the UITableView instance.

...
    let jsonClientList = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as! [[String:AnyObject]]

    self.clientList = jsonClientList.map{ $0["firstName"] as! String }
    dispatch_async(dispatch_get_main_queue()) {
       self.tableView.reloadData()
    }
  }
} catch {
...

Reading the JSON with mutable containers is not needed in this case.

Upvotes: 1

Related Questions