Reputation: 9
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
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