Ich habe Probleme beim Schreiben eines benutzerdefinierten Init für die Unterklasse von UIViewController. Grundsätzlich möchte ich die Abhängigkeit über die Init-Methode für ViewController übergeben, anstatt die Eigenschaft direkt wie festzulegen viewControllerB.property = value
Also habe ich eine benutzerdefinierte Init für meinen viewController erstellt und einen super designierten Init aufgerufen
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
Die View Controller-Oberfläche befindet sich im Storyboard. Ich habe auch die Schnittstelle für die benutzerdefinierte Klasse zu meinem View Controller gemacht. Und Swift muss diese init-Methode aufrufen, auch wenn Sie innerhalb dieser Methode nichts tun. Andernfalls beschwert sich der Compiler ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Das Problem ist, wenn ich versuche, meinen benutzerdefinierten Init aufzurufen, MyViewController(meme: meme)
ohne dass die Eigenschaften in meinem viewController überhaupt nicht initialisiert werden ...
Ich habe versucht zu debuggen, ich habe in meinem viewController gefunden, werde zuerst init(coder aDecoder: NSCoder)
aufgerufen, dann wird mein benutzerdefinierter Init später aufgerufen. Diese beiden Init-Methoden geben jedoch unterschiedliche self
Speicheradressen zurück.
Ich vermute, dass mit dem init für meinen viewController etwas nicht stimmt, und er wird immer self
mit dem zurückgegeben init?(coder aDecoder: NSCoder)
, der keine Implementierung hat.
Weiß jemand, wie man benutzerdefinierte Init für Ihren viewController richtig macht? Hinweis: Die Benutzeroberfläche meines viewControllers ist im Storyboard eingerichtet
Hier ist mein viewController-Code:
class MemeDetailVC : UIViewController {
var meme : Meme!
@IBOutlet weak var editedImage: UIImageView!
// TODO: incorrect init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
/// setup nav title
title = "Detail Meme"
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
editedImage = UIImageView(image: meme.editedImage)
}
}