在使用段时(Segment)在表视图控制器(Table View Controller)中出现“致命错误:索引超出范围”的问题,通常是由于在处理段切换时,访问了数组或集合中不存在的索引导致的。以下是关于这个问题的基础概念、原因分析以及解决方案。
以下是一个示例代码,展示了如何在段切换时正确处理数据源和索引:
import UIKit
class MyTableViewController: UITableViewController {
var segments = ["Segment 1", "Segment 2", "Segment 3"]
var currentSegmentIndex = 0
var dataSources: [Array<String>] = [
["Item 1", "Item 2", "Item 3"],
["Item A", "Item B"],
["Item X", "Item Y", "Item Z"]
]
override func viewDidLoad() {
super.viewDidLoad()
let segmentedControl = UISegmentedControl(items: segments)
segmentedControl.addTarget(self, action: #selector(segmentChanged(_:)), for: .valueChanged)
navigationItem.titleView = segmentedControl
}
@objc func segmentChanged(_ sender: UISegmentedControl) {
currentSegmentIndex = sender.selectedSegmentIndex
tableView.reloadData()
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataSources[currentSegmentIndex].count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = dataSources[currentSegmentIndex][indexPath.row]
return cell
}
}
dataSources
数组包含了每个段对应的数据集合。segmentChanged
方法在段切换时更新currentSegmentIndex
并刷新表格视图。tableView(_:numberOfRowsInSection:)
和tableView(_:cellForRowAt:)
方法中,通过currentSegmentIndex
访问正确的数据源。通过以上方法,可以有效避免“索引超出范围”的致命错误,确保段切换时的数据展示正确无误。
领取专属 10元无门槛券
手把手带您无忧上云