[英]Swift 4 - Can't call delegate method
我在一個viewController
定義了一個delegate
方法, viewController
所示:
import UIKit
protocol PatientsUserDelegate: NSObjectProtocol {
func patientsUserDelegateMethod()
}
class PatientsUserController: UIViewController {
var patientsUserDelegate: PatientsUserDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("Here")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func nextButtonPressed(_ sender: Any) {
patientsUserDelegate?.patientsUserDelegateMethod()
}
}
我想做的是在另一個viewController
調用此委托方法, viewController
所示:
class PatientsRegistration: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource, PatientsUserDelegate {
var patientsUserController = PatientsUserController()
override func viewDidLoad() {
patientsUserController.patientsUserDelegate = self
}
func patientsUserDelegateMethod() {
print("Here")
}
}
在我擁有的第一個viewController
中, viewController
被調用,但未調用委托方法。 我究竟做錯了什么?
問題是這一行:
var patientsUserController = PatientsUserController()
問題在於這與您實際要交談的PatientUserController不同。 它是一個新的PatientUserController,與眾不同,它只是漂浮在空中,與正在運行的程序無關。 因此,當您設置代表時...
patientsUserController.patientsUserDelegate = self
...您設置了錯誤的PatientUserController的委托。
這是一個常見的初學者錯誤,我為此寫了一篇博客文章:
http://www.programmingios.net/dont-make-a-new-instance-by-mistake/
正如您在閱讀該文章時所看到的那樣,您需要獲得對真實的 PatientsUserController的引用,該引用已存在於視圖控制器層次結構中。 如何執行取決於各個視圖控制器之間的關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.