致命错误:单击特定单元格进行 segue 时索引超出范围
Posted
技术标签:
【中文标题】致命错误:单击特定单元格进行 segue 时索引超出范围【英文标题】:Fatal error: Index out of range when click specific cells for segue 【发布时间】:2019-06-07 12:33:20 【问题描述】:我正在尝试创建一个 segue,因此每次单击 tableView 行时,都会显示另一个带有特定行信息的 ViewController。
我从 Firestore 填充我的数据。
基本上每个文档都包含一个数组,然后我按行填充数组的字符串
var ingredientsArray = [Ingredients]()
func numberOfSections(in tableView: UITableView) -> Int
return ingredientsArray.count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return ingredientsArray[section].compName.count
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
tableView.deselectRow(at: indexPath, animated: true)
performSegue(withIdentifier: "SearchDetails", sender: self)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "IngredientCell", for: indexPath) as! IngredientTableViewCell
cell.populate(ingredient: ingredientsArray[indexPath.section])
let item1 = ingredientsArray[indexPath.section].compName[indexPath.row]
cell.ingredientNameLabel.text = ("\(item1)")
return cell
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if let destination = segue.destination as? DetailViewController
//HERE IS THE ERROR.
destination.ingredient = ingredientsArray[(tableView.indexPathForSelectedRow?.row)!]
当我单击某些行时,我的应用程序崩溃并出现致命错误:索引超出范围
DetailViewController
class DetailViewController: UIViewController
@IBOutlet weak var compNameLbl: UILabel!
var ingredient : Ingredients?
override func viewDidLoad()
super.viewDidLoad()
compNameLbl.text = "\((ingredient?.compName)!)"
当我尝试在标签中显示名称时,整个数组都会出现。
【问题讨论】:
什么意思?我怎么能看到? 使用destination.ingredient = ingredientsArray[(tableView.indexPathForSelectedRow?.section)!]
非常感谢。我只需要将行更改为部分。最后一件事,当我单击行时,我想在 compNameLbl
中显示行的名称,但我得到了整个数组。
【参考方案1】:
从compName
数组中获取字符串值并传值
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if let destination = segue.destination as? DetailViewController, let indexPath = tableView.indexPathForSelectedRow
destination.ingredient = ingredientsArray[indexPath.section].compName[indexPath.row]
将DetailViewController
中的ingredient
类型改为String
class DetailViewController: UIViewController
@IBOutlet weak var compNameLbl: UILabel!
var ingredient : String?
override func viewDidLoad()
super.viewDidLoad()
compNameLbl.text = ingredient
【讨论】:
工作就像一个魅力。谢谢!以上是关于致命错误:单击特定单元格进行 segue 时索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章
CollectionView - 致命错误:索引超出范围 - 比视图显示的单元格多