错误 - 将json数据显示到tableview swift

时间:2015-12-03 20:14:24

标签: ios json swift uitableview

我尝试将某些数据显示到UITableView,但数据未显示在UITableView中。数据格式为JSON。

我写入UITableView的代码是:

var mainList:[[String:AnyObject]] = []

@IBOutlet var listCountriesTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    self.listCountriesTableView.dataSource = self
    self.listCountriesTableView.delegate = self

    let urlPath = "http://data.okfn.org/data/core/country-codes/r/country-codes.json"
    let url = NSURL(string: urlPath)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithURL(url!, completionHandler: { data, response, error -> Void in
        if (error != nil) {
            print(error)
        } else {
            do {
                let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [[String:AnyObject]]
                for country in jsonResult {
                    let countryName = country["name"]!
                    let countryDial = country["Dial"]!
                    let nameDial = ["name":countryName, "Dial":countryDial]
                    self.mainList.append(nameDial)

                    print(country["name"]!, country["Dial"]!)
                }
            } catch let error as NSError {
                print(error)
            }
        }
    })
    task.resume()
}

}

extension ListOfCountriesViewController: UITableViewDataSource, UITableViewDelegate {

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

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellList = tableView.dequeueReusableCellWithIdentifier("cellListCountries")! as UITableViewCell
    let data = mainList[indexPath.row]
    let countryTableView = data["name"]
    let codeTableView = data["Dial"]
    cellList.textLabel!.text = countryTableView
    cellList.detailTextLabel!.text = codeTableView
    return cellList
}

print(country["name"]!country["Dial"]!)向我显示了调试区域中正确的国家/地区列表和拨号代码,但未在UITableView中显示。

调试区域: 阿富汗93 阿尔巴尼亚355 阿尔及利亚213 美属萨摩亚1-684 安道尔376 安哥拉244 安圭拉1-264 南极洲672 安提瓜和巴布达1-268 阿根廷54 亚美尼亚374 阿鲁巴297

任何人都知道我的问题是什么? 谢谢!

1 个答案:

答案 0 :(得分:0)

您的数据已加载异步。当他们准备好UITableView已经显示。这就是为什么你应该重新加载它。拨打:

[self.listCountriesTableView reloadData];

self.listCountriesTableView.reloadData()
在解析数据之后