3

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()

    }

}

2 Answers 2

1

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

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}
Sign up to request clarification or add additional context in comments.

1 Comment

Oh!!! Thank you so much. I was working all yesterday on that, and tried so many solutions... The problem is solved!!!! Thanks a lot.
1

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

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

or else return 1

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.