2015-12-03 121 views
-1

我試圖顯示一些數據到UITableView,但數據沒有顯示在UITableView。數據以JSON格式化。錯誤 - 顯示json數據到tableview swift

我寫信是爲了顯示爲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 安圭拉I-264 南極洲672 安提瓜和巴布達1-268 阿根廷54 亞美尼亞374 阿魯巴297

任何人都知道我的問題是什麼? 謝謝!

+0

你是否在任何地方調用'reloadData'? –

+0

是的。我把它放在「task.resume()」之後。另外,結果在「cellList.textLabel!.text」中給我這兩個錯誤 - >不能指定'AnyObject'類型的值。鍵入'String?' – JoshV

回答

0

您的數據加載異步。當他們準備好UITableView時已經顯示。這就是爲什麼你應該重新加載它。呼叫:

[self.listCountriesTableView reloadData]; 

self.listCountriesTableView.reloadData() 

你解析數據之後。

+0

太好了。我把它放在「task.resume()」之後。此外,結果給我這2錯誤「cellList.textLabel!.text = countryTableView」和「cellList.detailTextLabel!.text = codeTableVie」--->不能分配類型'AnyObject?'的值鍵入'字符串? – JoshV

+0

@JoshB你在哪裏初始化'self.mainList' ?.在'for {...}'循環之後放置tableview更新代碼。 –

+0

我在代碼的開頭調用了一個'var mainList:[[String:AnyObject]] = []',然後我在'{...}' – JoshV