Ich bin für Unterklasse von UIViewController zum Schreiben eigener init Problem hat, im Grunde möchte ich für Viewcontroller die Abhängigkeit durch die init-Methode übergeben, anstatt-Eigenschaft direkt wie viewControllerB.property = value
Gewohnheit für UIViewController in Swift mit Schnittstelle Setup init in Storyboard
Also machte ich ein benutzerdefiniertes init für meine Viewcontroller und Super init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
die Schnittstelle in Storyboard befindet view-Controller bezeichnet nennen, ich habe auch die Schnittstelle für benutzerdefinierte Klasse machen meine view-Controller zu sein. Und Swift muss diese Init-Methode aufrufen, auch wenn Sie innerhalb dieser Methode nichts tun. Ansonsten wird der Compiler beschweren ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Das Problem ist, wenn ich versuche, meine Gewohnheit zu nennen init mit MyViewController(meme: meme)
es keine Eigenschaften hat init in meinem Viewcontroller überhaupt ...
Ich habe versucht, zu debuggen, ich habe in meinem ViewController gefunden, init(coder aDecoder: NSCoder)
zuerst aufgerufen, dann wird meine benutzerdefinierte init später aufgerufen. Diese beiden Init-Methoden geben jedoch unterschiedliche self
Speicheradressen zurück.
Ich vermute etwas falsch mit der init für meine ViewController, und es wird immer self
mit der init?(coder aDecoder: NSCoder)
, die, hat keine Implementierung.
Kann jemand benutzerdefinierte init für Ihren ViewController richtig machen? Hinweis: meine Viewcontroller-Schnittstelle ist hier in Storyboard
eingerichtet ist meine 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)
}
}
haben Sie eine Lösung dafür bekommen? – user481610