[英]Why self delegate is nil?
我想通過使用 openweathermap api 添加城市名稱來制作天氣應用程序。 但是我無法將我在 AddCityViewController 中添加的城市發送回 HomeViewController。 因為, self?.delegate 在 AddCityViewController.swift 中為零
@objc private func didTapSaveButton() {
print("clicked save button")
if let city = cityTextfield.text {
let weatherURL = URL(string: "https://api.openweathermap.org/data/2.5/weather?q=\(city)&APPID=b4251cb51691654da529bccf471596bc&units=imperial")!
let weatherResource = Resource<WeatherViewModel>(url: weatherURL) { data in
let weatherVM = try? JSONDecoder().decode(WeatherViewModel.self, from: data)
return weatherVM
}
Webservice().load(resource: weatherResource) { [weak self] result in
if let weatherVM = result {
if let delegate = self?.delegate {
delegate.addWeatherDidSave(vm: weatherVM)
self?.dismiss(animated: true, completion: nil)
}
}
}
}
}
當我調試 HomeViewController.swift 中的准備函數時,沒有被調用。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let nav = segue.destination as? UINavigationController else {
fatalError("NavigationController not found")
}
guard let addWeatherCityVC = nav.viewControllers.first as? AddCityViewController else {
fatalError("AddWeatherCityController not found")
}
addWeatherCityVC.delegate = self
}
我想要的是,當用戶按下保存按鈕時,我想將城市名稱傳遞回 HomeViewController。
extension HomeViewController: AddWeatherDelegate {
func addWeatherDidSave(vm: WeatherViewModel) {
print(vm.name)
}
}
您沒有使用 segue 進行導航,因此不會觸發 prepareForSegue 方法。 在您的代碼中,您正在手動初始化AddCityViewController
一個實例並呈現它。 因此,要解決此問題,您必須將委托設置為該實例。
@objc private func didTapAddButton() {
let vc = AddCityViewController()
vc.title = "Add City"
vc.delegate = self
let nav = UINavigationController(rootViewController: vc)
nav.modalPresentationStyle = .fullScreen
present(nav, animated: true)
}
否則,您可以使用 segue 進行導航。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.