Custom Init für UIViewController in Swift mit Interface-Setup im Storyboard
Ich habe ein Problem beim Schreiben eines benutzerdefinierten Init für eine Unterklasse von UIViewController. Im Grunde möchte ich die Abhängigkeit durch die init-Methode für viewController übergeben, anstatt die Eigenschaft direkt wie @ zu setzeviewControllerB.property = value
So habe ich einen benutzerdefinierten Init für meinen viewController erstellt und rufe super named init auf
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 Oberfläche für die benutzerdefinierte Klasse zu meiner View Controller-Oberfläche gemacht. Und Swift muss diese init-Methode aufrufen, auch wenn Sie innerhalb dieser Methode nichts unternehmen. Sonst beschwert sich der Compiler ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Das Problem ist, wenn ich versuche, mein benutzerdefiniertes Init mit @ aufzurufeMyViewController(meme: meme)
es initiiert überhaupt keine Eigenschaften in meinem viewController ...
Ich habe versucht zu debuggen, ich fand in meinem viewController,init(coder aDecoder: NSCoder)
wird zuerst aufgerufen, mein benutzerdefiniertes Init wird später aufgerufen. Diese beiden init-Methoden geben jedoch ein anderes @ zurücself
Speicheradressen.
Ich vermute, dass etwas mit dem Init für meinen viewController nicht stimmt. Es wird immer @ zurückgegebeself
mit deminit?(coder aDecoder: NSCoder)
, das keine Implementierung hat.
Weiß jemand, wie man einen benutzerdefinierten Init für Ihren viewController korrekt erstellt? Hinweis: Die Benutzeroberfläche von viewController ist in storyboard @ eingerichte
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)
}
}