我有一个tableview,我想在另一个视图控制器中显示单元格详细信息。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedCell = listAthkar[indexPath.row]
let destinationVC = showCellVC()
destinationVC.cellTitle.text = selectedCell.title
destinationVC.cellDisc.text = selectedCell.details
performSegue(withIdentifier: "showCell", sender: self)
}
showCellVC
有UILabel
和textview
我想要传递数据,数据来自核心数据。
每次按下单元格时,应用程序都会崩溃。
这是我得到的错误
致命错误:在展开Optional值时意外发现nil 2017-08-27 02:46:29.315056-0400 AthkarKF [13152:3972483]致命错误: 在展开可选值时意外发现nil
我认为错误是不言自明的,但我不确定可选值在哪里,我不确定这是否是将数据传递给另一个VC的正确方法。
你能帮忙吗,我真的很感激。
答案 0 :(得分:0)
您应该通过prepareForSegue:sender:方法传递所需的数据。您可以通过执行以下操作来实现此目的:
1 - 将selectedCell
声明为可在整个视图控制器中访问的实例变量:
// for sure you'll need to declare its data type...
var selectedCell:...
2 - 从tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
委托方法中删除“传递数据”代码,您所要做的就是执行segue:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedCell = listAthkar[indexPath.row]
performSegue(withIdentifier: "showCell", sender: self)
}
3 - 实施prepareForSegue:sender:
并通过它传递数据:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// you may need to check the segue identifier in case of your view controller contains multiple segues
if segue.identifier == "showCell" {
let destinationVC = segue.destination as! showCellVC()
destinationVC.cellTitle.text = selectedCell.title
destinationVC.cellDisc.text = selectedCell.details
}
}
一般而言,最终结果应类似于:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
// STEP #01:
// for sure you'll need to declare its data type...
var selectedCell:...
// STEP #02:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedCell = listAthkar[indexPath.row]
performSegue(withIdentifier: "showCell", sender: self)
}
// STEP #03:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// you may need to check the segue identifier in case of your view controller contains multiple segues
if segue.identifier == "showCell" {
let destinationVC = segue.destination as! showCellVC()
destinationVC.cellTitle.text = selectedCell.title
destinationVC.cellDisc.text = selectedCell.details
}
}
}