swift - 无法解决线程 1:致命错误:索引超出范围
问题描述
我有以下内容:
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
}
这每次都返回 4。假设您缩短了数组,并且只有 3 个子数组。它会抛出这个错误,因为 pickerView 期望从你的数组中再增加一行,只有 3 行。所以它尝试访问第 4 个索引并发现它是无效的。
解决方案:
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return playerData.count
}
将相同的逻辑应用于您的numberOfRowsInComponent
.
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return playerData[component].count
}
推荐阅读
- python - CUDA 和 CuDNN 版本与 Tensorflow2.4.1 冲突
- android - 在android中下载后无法从我的应用程序中打开文件(pdf/doc)
- flutter - 如何在 Flutter 中“修剪”路径
- python - find_executable() 的不同结果:python vs sudo python
- c - 如何将 volatile 浮点变量分配给任何其他变量?
- java - JAVA - 按多个值对 Json 数组进行排序,同时保留先前的排序顺序
- java - 上传文件 jax rs kumuluz 球衣
- python-3.x - 如何将 bg 颜色作为 tk.Entry 的十六进制
- bash - 我如何查找属性,如果它没有评论,那么我更新它,如果它评论然后取消评论,如果没有找到,然后写它
- r - geom_smooth 不适用于趋势线,点数太少?