簡體   English   中英

Swift 4-無法調用委托方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM