向下滚动时选择器视图崩溃

Picker View crash when scroll down

我正在构建一个 "Date" UiPickerView 以便能够自定义字体大小、类型和颜色。

请看我的代码。

{

    @IBOutlet weak var dataInicio: UIPickerView!

    var dataDia1: NSMutableArray!
    var dataMes1: NSArray!
    var dataAno1: NSMutableArray!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.dataDia1 = NSMutableArray()

        for dia in 1...31
        {
            dataDia1.addObject("\(dia)")
        }

        self.dataMes1 = NSArray(objects: "Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro")

        self.dataAno1 = NSMutableArray()

        for ano in 1970...2016
        {
            dataAno1.addObject("\(ano)")
        }


    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
    {
        return 3
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    {
        if (component == 0)
        {
            return dataDia1.count
        }

        if (component == 1)
        {
            return dataMes1.count
        }

        else
        {
            return dataAno1.count
        }
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    {
        var componentStr = dataDia1[row]

        if(component == 0)
        {
            return componentStr as? String
        }

        if(component == 1)
        {
            componentStr = (dataMes1[row] as? String)!
            return componentStr as? String

        }
        else
        {
            componentStr = (dataAno1[row] as? String)!
            return componentStr as? String
        }
    }

}

构建成功,但是当我向下滚动年份时,当数组中的组件超过 27 个时它会崩溃。

我正在发起这个,我已经在网上四处寻找,但没有找到任何东西。 :(

我做错了什么?

无论请求哪个组件,您都调用 var componentStr = dataDia1[row]。将您的代码更改为:

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
{
    if(component == 0)
    {
        var componentStr = dataDia1[row]
        return componentStr as? String
    }
    else if(component == 1)
    {
        var componentStr = (dataMes1[row] as? String)!
        return componentStr as? String

    }
    else
    {
        var componentStr = (dataAno1[row] as? String)!
        return componentStr as? String
    }
}

还要注意else if的使用。