2017-03-19 12 views
2

PikerViewビューコントローラでデータが表示されません。pickerviewは、アレイからのデータを表示しません。

いくつかの配列リテラル値でテストするとうまく動作します。

どこかでデータをリロードする必要がありますか?あなたはそれを再ロードするためにあなたのpickerviewにreloadAllComponentsを呼び出す必要があります(私はそれを確認していないと私はあなたが持っているprint文でデータを参照行うと仮定)あなたはURLからデータを取得行うことを提供

class FirstViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource 
{ 
    @IBOutlet var baseCurrency: UITextField! 
    @IBOutlet var excahngeCurrency: UITextField! 
    @IBOutlet var dropDown: UIPickerView! 

    var list: [String: AnyObject] = [String: AnyObject]() 
    var titles: [String] = [] 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     let url:URL = URL(string: "https://openexchangerates.org/api/currencies.json?app_id=7486951aeb994599a08cd7979bef3c03")! 
    Alamofire.request(url).responseJSON(completionHandler: 
     { 
      response in 
      switch response.result 
      { 
      case.success: 
       self.list = response.result.value as! [String: AnyObject] 
       for (key, _) in self.list 
       { 
        self.titles += [key] 
       } 

       print(self.titles) 
      case.failure: 
       print("error") 
      } 
     }) 
    } 

    func numberOfComponents(in pickerView: UIPickerView) -> Int 
    { 
     return 1 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
    { 
     return self.titles[row] 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    { 
     return self.titles.count 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    { 
     exchangeCurrency.text = self.titles[row] 
    } 
} 

答えて

0

データが取り出された後のデータ。

0

更新しますsuccessブロックとして:

case success: 

    self.list = reponse.result.value as! [String: AnyObject] 

    for (key, _) in self.list { 
     self.titles += [key] 
    } 

    print(self.titles) 

    if (self.titles.count > 0) { 
     // reload your picker view 
     self.dropDown.reloadAllComponents() 
    } else { 
     print("there is no data for your picker view") 
    } 
+0

おかげKrunal。私はそれを追加すると、私は次のエラーが表示されます: 'pickerView(_:titleForRow:forComponent :)'へのあいまいな参照 ' –

+0

あなたは正確なエラーラインを共有することができます...ここに独自のピッカービューインスタンスを使用しましたか... dropDown。私は自分のコードをコピーして自分のコードに置き換えたと思います。ピッカーインスタンスを更新していない可能性があります。私は私の答えを更新しました。ピッカーインスタンスを更新していない場合は、もう一度お試しください。 – Krunal

+0

は魅力的に働いた。ありがとう、トン! –

関連する問題