J'ai un problème pour écrire un init personnalisé pour la sous-classe de UIViewController, fondamentalement, je veux passer la dépendance via la méthode init pour viewController plutôt que de définir la propriété directement comme viewControllerB.property = value
J'ai donc créé un init personnalisé pour mon viewController et j'ai appelé init super désigné
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
L'interface du contrôleur de vue réside dans le storyboard, j'ai également fait de l'interface pour la classe personnalisée mon contrôleur de vue. Et Swift nécessite d'appeler cette méthode init même si vous ne faites rien dans cette méthode. Sinon, le compilateur se plaindra ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Le problème est que lorsque j'essaye d'appeler mon init personnalisé sans MyViewController(meme: meme)
qu'il n'initialise du tout les propriétés dans mon viewController ...
J'essayais de déboguer, j'ai trouvé dans mon viewController, init(coder aDecoder: NSCoder)
être appelé en premier, puis mon init personnalisé est appelé plus tard. Cependant, ces deux méthodes init renvoient des self
adresses mémoire différentes .
Je soupçonne que quelque chose ne va pas avec l'initialisation de mon viewController, et il reviendra toujours self
avec le init?(coder aDecoder: NSCoder)
, qui n'a pas d'implémentation.
Est-ce que quelqu'un sait comment créer correctement un init personnalisé pour votre viewController? Remarque: l'interface de mon viewController est configurée dans le storyboard
voici mon code viewController:
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)
}
}