2017-01-27 1 views
4

Unten ist mein Code. Hier funktioniert Druck (Währung) Funktion .. Das bedeutet, Json Daten abgerufen wird. Wird aber nicht in der Tabellenansicht angezeigt.Laden von JSON-Daten in die Tabellenansicht funktioniert nicht

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") 
} 

Teil einer Tabellen-

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 Abrufen von Daten

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


} 

Die Daten werden mit der Druckfunktion in der Xcode zeigt. Es ist also klar, dass Daten abgerufen werden. Aber das Problem ist, wenn die Daten in die Tabellenansicht geladen werden.
Bitte helfen Sie mir, es zu laden.

+0

entfernen 'public' von den Tableview Methoden Überprüfen Sie auch Ihre' 'tableView' delegate' und 'dataSourece' ist ordnungsgemäß mit Ihrem viewController verbunden. –

+0

Wieder funktioniert es nicht @NiravD – Rash

+1

Reload die tableView auf Hauptthread wie 'DispatchQueue.main.async {self.tableView.ReloadData()}' –

Antwort

3

Daten zu holen .. (Ihre NOK ist nicht String .. seine Doppel)

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

Vielen Dank @El Captain v2.0. – Rash

+0

@El Captain v2.0, um alle Preise zu laden, welche Änderung im Code benötigt wird. Iam verwirrt mit der Schnur, Doppel .. Plz mir helfen – Rash

+0

Wie sieht Ihre Tischzelle aus? –

Verwandte Themen