我有一个包含有关酒吧信息的应用程序。 listViewController将每个Bar对象保存在一个单元格中(名称,地址,电话等)。
当我按下单元格时,我将移至显示数据的infoViewController,但是由于某些原因它不起作用
这是TableView中的代码-
func tableView(_ tableView: UITableView, didSelectRowAt
indexPath: IndexPath) {
let barSelected = bars[indexPath.row]
let infoVC = storyboard?.instantiateViewController(withIdentifier: "infoViewController") as! InfoViewController
chooseBarDelegate?.chooseBar(barChosen: barSelected)
present(infoVC, animated: true, completion: nil)
该类符合我创建的协议-
导入基金会
protocol barInfoDelegate {
func chooseBar(barChosen:Bar)
}
并且我还创建了一个委托的实例-
var chooseBarDelegate:barInfoDelegate?
在detailViewController中,我创建了一个带有可选对象的var-
var infoBar:Bar?
并添加了扩展名-
extension InfoViewController: barInfoDelegate {
func chooseBar(barChosen: Bar) {
infoBar = barChosen
}
}
我还在infoViewController中将委托设置为self
listViewController.chooseBarDelegate? = self
应用程序不会崩溃,但信息不会传递。 当我使用打印对象在调试器中检查时,我可以看到“ barSelected”确实包含一个对象,但是infoBar为nil。
我在做什么错了?
谢谢!
答案 0 :(得分:0)
根本没有理由要委托。摆脱协议,chooseBarDelegate
属性和barInfoDelegate
上的InfoViewController
扩展名。您唯一需要保留的是var infoBar:Bar?
的{{1}}属性。
然后替换此行:
InfoViewController
具有:
chooseBarDelegate?.chooseBar(barChosen: barSelected)