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)
    }

}

Antworten auf die Frage(12)

Ihre Antwort auf die Frage