Swift 无法解析线程1:致命错误:索引超出范围

Swift 无法解析线程1:致命错误:索引超出范围,swift,Swift,我有以下资料: class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, NSFetchedResultsControllerDelegate { @IBOutlet weak var playerList: UIPickerView! var playerData: [[String]] = [[String]]() func viewDidLoad()

我有以下资料:

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, NSFetchedResultsControllerDelegate {
    @IBOutlet weak var playerList: UIPickerView!

    var playerData: [[String]] = [[String]]()

    func viewDidLoad() {
        super.viewDidLoad

        playerData = [["1", "2", "3"],["a","b","c"],["i","ii","iii"],["!","@","#"]]

        // Connect data:
        self.playerList.delegate = self
        self.playerList.dataSource = self
    }

    // The number of columns of data
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 4
    }

    // The number of rows of data
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return playerData.count
    }

    // The data to return for the row and component (column) that's being passed in
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return playerData[component][row]
    }
}
我不断得到:

线程1:致命错误:索引超出范围


您的
numberOfComponents
应该是二维数组中外部数组的大小

您的代码:

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 4
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return playerData.count
}
每次返回4。假设你缩短了你的阵列,只有3个子阵列。它将抛出此错误,因为pickerView希望从只有3行的数组中多出一行。所以它尝试访问第四个索引,发现它无效

解决方案:

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 4
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return playerData.count
}
将相同的逻辑应用于
numberOfRowsInComponent

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return playerData[component].count
}

您的
numberOfComponents
应该是二维数组中外部数组的大小

您的代码:

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 4
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return playerData.count
}
每次返回4。假设你缩短了你的阵列,只有3个子阵列。它将抛出此错误,因为pickerView希望从只有3行的数组中多出一行。所以它尝试访问第四个索引,发现它无效

解决方案:

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 4
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return playerData.count
}
将相同的逻辑应用于
numberOfRowsInComponent

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return playerData[component].count
}

numberOfComponents
playerData。count
numberOfRowsInComponent
playerData[component]。count
numberOfComponents
playerData[component]。count