Lukiolio
Lukiolio

Reputation: 9

Swift: ProtocolDelegate optional value error

I want to delegate some tasks to the AcceptController, but my delegate property inside of 'SendController' always returns nil, so no delegation will ever be executed. I just can't figure out why my delegate property 'übergabeDelegate' always returns nil.

protocol ÜbergabeDelegate {
    func übergebeText(text: String)
}

class SendController: UIViewController {
    @IBOutlet weak var textField: UITextField!

    var übergabeDelegate: ÜbergabeDelegate?

    @IBAction func save(_ sender: UIButton) {
        if let text = textField.text {
            if übergabeDelegate != nil {
                übergabeDelegate!.übergebeText(text: text)
            } else {
                print("\nübergabeDelegate is nil\n")
            }
        }
    }
}

class AcceptController: UIViewController {
    @IBOutlet weak var label: UILabel!

    let sendController = SendController()

    override func viewDidLoad() {
        super.viewDidLoad()


        sendController.übergabeDelegate = self
        //print("Delegate gesetzt")
    }
}

extension AcceptController: ÜbergabeDelegate {
    func übergebeText(text: String) {
        label.text = "\(text)"
    }
}

I expect the label to present the input I gave on my SendController but the text of the label never actually changes.

Upvotes: 0

Views: 45

Answers (1)

ɯɐɹʞ
ɯɐɹʞ

Reputation: 1068

inside viewDidLoad let sendController = SendController() creates a local variable. the sendController will then be released after viewDidLoad returns. set the sendController as a property of the AcceptController and the delegate will persist when you assign it because the SendController object will not be released after viewDidLoad returns.

Upvotes: 1

Related Questions