【发布时间】:2021-06-03 18:08:01
【问题描述】:
protocol WeatherManagerDelegate {
func didUpdateWeater(weather: ConsolidatedWeather)
func didFailWithError(error: Error)
}
ViewController:我在哪里设置值 didSelectRowAt 并使用 performSegue 转到另一个 viewController
class WeatherListViewController: UIViewController {
var delegate: WeatherManagerDelegate?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let index = weatherViewModel.didSelect(at: indexPath.row)
self.delegate?.didUpdateWeater(weather: index)
performSegue(withIdentifier: K.DetailsView.segueIndentifier, sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVc = segue.destination as! DetailsViewController
}
}
这是我的 ViewModel 类:从我的 ViewModel,我会将值发送到 ViewController 并更新 UI
class DetailsWeatherViewModel{
var w = WeatherListViewController()
func a(){
print("aaa")
w.delegate = self
}
}
extension DetailsWeatherViewModel: WeatherManagerDelegate{
func didUpdateWeater(weather: ConsolidatedWeather) {
weatherData = weather
print("weatherData: \(String(describing: weatherData))")
}
func didFailWithError(error: Error) {
print(error)
}
}
我做错了什么...????
【问题讨论】:
-
你的介绍如何
WeatherListViewController? -
没找到你吗?
-
抱歉,您在哪里展示
WeatherListViewController?你能显示它的代码吗/ -
让我们开始调试:
self.delegate?.didUpdateWeater(weather: index)那是您期望结果的行,不是吗?我们先看看,delegate是 nil 吗?如果是这样,让我们找出原因。现在,我认为您的问题是因为您正在执行var w = WeatherListViewController(),它正在创建一个新实例,而不是您可能在屏幕上看到的实例。此外,它正在创建一个未连接到它的 Storyboard 的新实例,所以你会在 performSegue 上失败,它应该在尝试访问它的 IBOutlets 时崩溃,等等。