2017-04-13 7 views
1
//uitableoutletname 
@IBOutlet weak var tableview: UITableView! 
//overridefunction 
override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    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 


        //convert to nsdictionary 
        if let rates = myJson["rates"] as? NSDictionary 
        { 
         var myarry = [NSString]() 
         for (_,value) in rates 
         { 

          //thispart is giving error how cat it be resolved 


          myarry.append(value as! NSString) 
          self.tableview.beginUpdates() 
          self.tableview.insertRows(at: [IndexPath(row: myarry.count-1, section: 0)], with: .automatic) 
          self.tableview.endUpdates() 
         } 
        } 
       } 
       catch 
       { 

       } 
      } 
     } 
    } 
    task.resume() 
} 

jsonコールでデータをフェッチしてnsdictionaryに変換し、uitableviewに挿入しようとしました。ランタイムエラーが発生しています。私は変数値を印刷し、キーは印刷機能を使って完全に動作しています。uitableview swift 3.0へのすべてのキーにnsdictionary値を挿入する方法

+0

ランタイムエラーとは何ですか? – Sneha

答えて

0

dataTaskでは、メインスレッド上でUIを更新する必要があり、非同期タスクです。また、NSDictionaryNSStringを使用するSwift type inteadを使用してください。

if let rates = myJson["rates"] as? [String: Double] { 

    DispatchQueue.main.async { 

     for (_, value) in rates { 

      self.myarry.append(String(value)) 
      self.tableview.beginUpdates() 
      self.tableview.insertRows(at: [IndexPath(row: self.myarry.count-1, section: 0)], with: .automatic) 
      self.tableview.endUpdates() 
     } 
    } 
} 
0

私にとっては、URLSessionが独自のスレッドを作成するため、私のスレッドではないUIコードを実行しているようです。 GCDを使用してテーブルビューのコードをラップするようにしてください:

DispatchQueue.main.async { 
    self.tableview.beginUpdates() 
    self.tableview.insertRows(at: [IndexPath(row: myarry.count-1, section: 0)], with: .automatic) 
    self.tableview.endUpdates() 
} 
関連する問題