Mam problem z napisaniem niestandardowego init dla podklasy UIViewController, w zasadzie chcę przekazać zależność przez metodę init dla viewController, zamiast ustawiać właściwość bezpośrednio jak viewControllerB.property = value
Zrobiłem więc niestandardowy init dla mojego viewController i wywołałem super wyznaczony init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
Interfejs kontrolera widoku znajduje się w scenorysie, stworzyłem również interfejs dla klasy niestandardowej, aby był moim kontrolerem widoku. Swift wymaga wywołania tej metody init, nawet jeśli nic nie robisz w ramach tej metody. W przeciwnym razie kompilator będzie narzekał ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Problem polega na tym, że próbuję wywołać mój niestandardowy init, MyViewController(meme: meme)
który w ogóle nie inicjuje właściwości w moim viewController ...
Próbowałem debugować, znalazłem w moim viewController, init(coder aDecoder: NSCoder)
najpierw zostałem wywołany, a później mój niestandardowy init został wywołany. Jednak te dwie metody init zwracają różne self
adresy pamięci.
Podejrzewam, że coś jest nie tak z initem dla mojego kontrolera viewController i zawsze będzie zwracać self
z operatorem init?(coder aDecoder: NSCoder)
, który nie ma implementacji.
Czy ktoś wie, jak poprawnie wykonać niestandardowy init dla twojego viewController? Uwaga: mój interfejs viewControllera jest skonfigurowany w scenorysie
oto mój kod 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)
}
}