Init personalizado para UIViewController en Swift con configuración de interfaz en storyboard
Tengo problemas para escribir init personalizado para la subclase de UIViewController, básicamente quiero pasar la dependencia a través del método init para viewController en lugar de establecer la propiedad directamente comoviewControllerB.property = value
Así que hice un init personalizado para mi viewController y llamé a init super designado
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
La interfaz del controlador de vista reside en el guión gráfico, también hice que la interfaz para la clase personalizada sea mi controlador de vista. Y Swift requiere llamar a este método init incluso si no está haciendo nada dentro de este método. De lo contrario, el compilador se quejará ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
El problema es cuando intento llamar a mi init personalizado conMyViewController(meme: meme)
no inicia propiedades en mi viewController en absoluto ...
Estaba tratando de depurar, encontré en mi viewController,init(coder aDecoder: NSCoder)
primero se llama, luego mi init personalizado se llama más tarde. Sin embargo, estos dos métodos init devuelven diferentesself
Direcciones de memoria.
Sospecho que algo está mal con el init para mi viewController, y siempre volveráself
con elinit?(coder aDecoder: NSCoder)
, que no tiene implementación.
¿Alguien sabe cómo hacer un init personalizado para su viewController correctamente? Nota: la interfaz de mi viewController está configurada en el guión gráfico
Aquí está mi código de 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)
}
}