jilu
jilu

Reputation: 123

table view not loading with swift

I have trouble in loading the table view when parsing json files in swift.

Parsing the data is doing well. But no data are displayed in the table view.

This is the code :

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var redditListTableView: UITableView!

    var tableData = []

    @IBAction func cancel(sender: AnyObject) {
        self.dismissViewControllerAnimated(false, completion: nil)
        println("cancel")
    }
    @IBAction func done(sender: AnyObject) {
        println("done")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        searchJsonFile("blabla.json")
    }

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

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 0
    }

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

        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")

        let rowData: NSString = self.tableData[indexPath.row] as NSString
        cell.textLabel.text = rowData as String

        return cell
    }

    func searchJsonFile(searchFile: String) {

        let urlPath = "http://data.../\(searchFile)"
        let url = NSURL(string: urlPath)
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithURL(url!, completionHandler: {data, response, error -> Void in
            println("Task completed")
            if(error != nil) {
                // If there is an error in the web request, print it to the console
                println(error.localizedDescription)
            }
            var err: NSError?

            var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary

            if(err != nil) {
                println("JSON Error \(err!.localizedDescription)")
            }
            var results = [String]()

            if let results1 = jsonResult["data"] as? NSDictionary{
                for (key, value) in results1 {
                    if let eng = value["eng"] as? NSDictionary {
                        if let name = eng["name"] as? NSString{
                            results.append(name)
                        }
                    }
                }
            }

            //println(results)  OK!!!!

            dispatch_async(dispatch_get_main_queue(), {
                self.tableData = results
                self.redditListTableView.reloadData()
            })

        })

        task.resume()

    }

}

Upvotes: 3

Views: 1336

Answers (2)

Aniket Bochare
Aniket Bochare

Reputation: 427

If you are not having sections then just remove this function or comment

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 0
    }

or else return 1

Upvotes: 1

Paulw11
Paulw11

Reputation: 114984

You are returning 0 from numberOfSectionsInTableView - so you get no data displayed. You want 1 section -

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

Upvotes: 1

Related Questions