Estou tendo problemas para escrever init personalizado para a subclasse de UIViewController, basicamente, quero passar a dependência por meio do método init para viewController em vez de definir a propriedade diretamente como viewControllerB.property = value
Então fiz um init personalizado para meu viewController e chamei o init super designado
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
A interface do controlador de visualização reside no storyboard, eu também fiz a interface da classe customizada para ser meu controlador de visualização. E o Swift requer a chamada deste método init mesmo se você não estiver fazendo nada dentro desse método. Caso contrário, o compilador irá reclamar ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
O problema é que quando tento chamar o meu init personalizado, MyViewController(meme: meme)
ele não faz as propriedades do init no meu viewController ...
Eu estava tentando depurar, encontrei em meu viewController, fui init(coder aDecoder: NSCoder)
chamado primeiro e, em seguida, meu init personalizado foi chamado mais tarde. No entanto, esses dois métodos init retornam self
endereços de memória diferentes .
Estou suspeitando de algo errado com o init do meu viewController e ele sempre retornará self
com o init?(coder aDecoder: NSCoder)
, que não tem implementação.
Alguém sabe como fazer init personalizado para seu viewController corretamente? Nota: a interface do meu viewController é configurada no storyboard
aqui está meu código 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)
}
}