pickerview不显示数组中的数据

时间:2017-03-19 00:36:04

标签: ios arrays swift xcode uipickerview

我的视图控制器中的

PikerView未显示数据。

当我使用一些Array文字值测试它时,它工作正常。

我应该在某处重新加载数据吗?

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]
    }
}

2 个答案:

答案 0 :(得分:0)

如果您确实从URL获取了数据(我没有验证这一点,并且我认为您确实看到了print语句中的数据),则需要在您的选择器视图中调用reloadAllComponents在获取数据后重新加载数据。

答案 1 :(得分: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")
    }