2017-01-27 1 views
4

Ниже приведен мой код. Здесь работает функция печати (валюты). Это означает, что извлекаются данные json. Но не отображается в таблице.Загрузка данных JSON в таблицу не работает

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
@IBOutlet weak var tableView: UITableView! 
var TableData:Array<String> = Array <String>() 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    get_data_from_url("http://api.fixer.io/latest") 
} 

Tableview часть

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return(TableData.count) 
} 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") 
    cell.textLabel?.text = TableData[indexPath.row] 
    return (cell) 
} 

JSON данные извлечение

func get_data_from_url(_ link:String) 
{ 
    let url = URL(string: "http://api.fixer.io/latest") 

    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in 
     if error != nil 
     { 
      print ("ERROR") 
     } 
     else 
     { 
      if let content = data 
      { 
       do 
       { 
        //Array 
        let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

        if let rates = myJson["rates"] as? NSDictionary 
        { 
         if let currency = rates["NOK"] as? String 
         { 
          print(currency) 
          self.TableData.append(currency) 
          self.tableView.reloadData() 
         } 
        } 
       } 
       catch 
       { 

       } 
      } 
     } 
    } 
    task.resume() 


} 

Данные, показывающий в Xcode с функцией печати. Поэтому ясно, что данные извлекаются. Но проблема заключается в загрузке данных в таблицу.
Пожалуйста, помогите мне его загрузить.

+0

Удалить 'public' из методов Tableview Также проверьте ваш' 'tableView' delegate' и 'dataSourece' правильно связаны с вашим viewController. –

+0

Снова это не работает @NiravD – Rash

+1

Обновить таблицуView в основном потоке, например 'DispatchQueue.main.async {self.tableView.reloadData()}' –

ответ

3

Чтобы получить данные .. (ваш NOK не Струнный .. его двойник)

let myJson = try JSONSerialization.jsonObject(with: content, options:[]) as [String:Any] 

       if let rates = myJson["rates"] as? [String:Double], 
        let currency = rates["NOK"] 
       { 
        print(currency) 
        self.tableData.append(String(currency)) 
        DispatchQueue.main.async { 
         self.tableView.reloadData() 
        } 
       } 

// Declate array of String 
var tableData = [String]() 

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") 
    cell.textLabel?.text = tableData[indexPath.row] 
    return cell 
} 
+0

Спасибо @El Captain v2.0. – Rash

+0

@ El Captain v2.0, для загрузки всех тарифов, какие изменения необходимы в коде. Я запутался со строкой, дважды. Plz помогите мне – Rash

+0

Хочешь, чтобы твоя ячейка стола выглядела? –