gpt4 book ai didi

iOS - 索引超出范围

转载 作者:搜寻专家 更新时间:2023-11-01 06:38:15 24 4
gpt4 key购买 nike

我在我的应用程序中偶然发现了一个错误:

fatal error: Index out of range (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]

附言如果我要这样做:

DestVC.FirstString = "Hello World"

仅选择第一个选项时显示 Hello World,然后代码/应用程序中断,我在该行收到相同的错误“索引超出范围”:

        ThirdAnswerArray = ThirdArray[indexPath.row]

最佳答案

这个简单的答案是您的 brandAnswerArray 没有足够的值来为您提供索引 indexPath.row 处的内容。即,如果您有一个包含 5 个值的数组,并且您向它请求数组 [8],应用程序将崩溃,因为索引 8 不存在。

具体来说,您是在告诉表格您有一定数量的单元格/行:

brandArray[section].sectionBrands.count

这意味着对于从 0 到 brandArray[section].sectionBrands.count 的每个整数,表格将要求您生成一个单元格。因此,这就是您的 indexPath.row 可以拥有的范围。

但是:在您的 prepareForSegue 中,您正在访问 brandAnswerArray[indexPath.row],而 brandAnswerArray 根本没有足够的值来为您提供该请求索引处的任何内容(这是一种风险,因为您使用了不同的部分建表的数据)。

关于iOS - 索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com