我偶然发现了我的应用程序中的错误:
致命错误:索引超出范围(lldb)
我想我可能知道问题是什么,但是,没有关于如何修改错误的线索。
我相信由于我正在使用节标题,这导致了问题。我已经证明了阅读编码以及尝试修复它并在线搜索。下面我发布了我的代码示例(不想包含所有代码,因为它包含几百行代码)。
基本上,我将TableViewController与SWReveal结合使用,用户选择一个选项并显示文本。
class BackTableVC: UITableViewController {
struct Brands {
var sectionName : String!
var sectionBrands : [String]!
}
struct ThirdView {
var ThirdViewArray = [String]()
}
var brandArray = [Brands]()
var ThirdArray = [ThirdView]()
var brandAnswerArray = [String]()
override func viewDidLoad() {
brandArray = [
Brands(sectionName: "Bugatti", sectionBrands: ["EB 110","Veyron"])]
ThirdArray = [ThirdView(ThirdViewArray: ["EB 110","Veyron"])]
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return brandArray[section].sectionBrands.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell!
cell.textLabel?.text = brandArray[indexPath.section].sectionBrands[indexPath.row]
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let DestVC = segue.destinationViewController as! CarDetailsVC
let indexPath : NSIndexPath = self.tableView.indexPathForSelectedRow!
let ThirdAnswerArray : ThirdView
ThirdAnswerArray = ThirdArray[indexPath.row]
DestVC.brandAnswerArray = ThirdAnswerArray.ThirdViewArray
DestVC.FirstString = brandAnswerArray[indexPath.row]
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return brandArray.count
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return brandArray[section].sectionName
}
}
import Foundation
struct ThirdView {
var ThirdViewArray = [String]()
}
class CarDetailsVC: UIViewController {
var FirstString = String()
var brandAnswerArray = [String]()
@IBOutlet var Label: UILabel!
override func viewDidLoad() {
Label.text = FirstString
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
_ = segue.destinationViewController as! CarDetailsVC
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我的ThirdView结构和CarDetailsVC位于单独的.swift文件中。
让我悲伤的路线是:
DestVC.FirstString = brandAnswerArray[indexPath.row]
P.S。如果我这样做:
DestVC.FirstString = "Hello World"
只选择第一个选项时显示Hello World,然后代码/应用程序中断了我在行上得到相同的错误“index out of range”:
ThirdAnswerArray = ThirdArray[indexPath.row]
答案 0 :(得分:3)
这个简单的答案是你的brandAnswerArray没有足够的值来为你提供索引indexPath.row的东西。即如果你有一个包含5个值的数组并且你要求它为数组[8],那么应用程序将崩溃,因为索引8不存在。
具体来说,您告诉您的表格您有一定数量的单元格/行:
brandArray [段] .sectionBrands.count
这意味着对于每个整数,从0到任何brandArray [section] .sectionBrands.count,该表将要求您生成一个单元格。因此,这是indexPath.row可以拥有的范围。
但是:在您的prepareForSegue中,您正在访问brandAnswerArray [indexPath.row],而brandAnswerArray根本没有足够的值来为您提供所请求索引的任何内容(这是一种风险,因为您使用了不同的部分构建表的数据)。