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 configurar la propiedad directamente como viewControllerB.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 la interfaz para que 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 que cuando intento llamar a mi init personalizado MyViewController(meme: meme)
, no inicia propiedades en mi viewController en absoluto ...
Estaba tratando de depurar, encontré en mi viewController, init(coder aDecoder: NSCoder)
me llaman primero, luego se llama a mi init personalizado más tarde. Sin embargo, estos dos métodos init devuelven self
direcciones de memoria diferentes .
Sospecho que algo anda mal con init para mi viewController, y siempre regresará self
con init?(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 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)
}
}