Swift中通过segue传值时目标控制器接收对象为nil问题求助
问题根因
你代码中存在变量名拼写不匹配的错误,这是导致传值失败的直接原因:
prepare方法内你定义的目标控制器变量名为dVeiwController- 后续给
property赋值时误用了未初始化的变量detailVeiwController,赋值操作完全没有执行,目标控制器的隐式解包属性property自然为空,触发崩溃。
修正后的prepare方法代码
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // 用guard统一做可选绑定,避免拼写错误 guard segue.identifier == "sPropSegue", let indexPath = tableView.indexPathForSelectedRow, let detailViewController = segue.destination as? PDViewController else { return } let prop = modelProperty.props[indexPath.row] detailViewController.property = prop }
额外校验和优化点
- 确认storyboard中segue的
identifier确实为sPropSegue,大小写完全匹配 - 确认segue的目标控制器类确实设置为
PDViewController - 建议修改目标控制器的属性写法,避免隐式解包的崩溃风险:
var property: Property? override func viewDidLoad() { super.viewDidLoad() // 先解包再使用,更安全 guard let property = property else { return } propImage.image = UIImage(named: property.imageName) priceLabel.text = property.price // 注意原代码的priceLable拼写错误,Lable应为Label addressTextView.text = property.address }
内容的提问来源于stack exchange,提问作者ASN
相关产品推荐
相关产品推荐

