Ho problemi a scrivere un inizializzazione personalizzato per la sottoclasse di UIViewController, fondamentalmente voglio passare la dipendenza attraverso il metodo init per viewController piuttosto che impostare la proprietà direttamente come viewControllerB.property = value
Quindi ho creato un init personalizzato per il mio viewController e ho chiamato init super designato
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
L'interfaccia del controller di visualizzazione risiede nello storyboard, ho anche creato l'interfaccia per la classe personalizzata come controller di visualizzazione. E Swift richiede di chiamare questo metodo init anche se non stai facendo nulla all'interno di questo metodo. Altrimenti il compilatore si lamenterà ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Il problema è che quando provo a chiamare il mio init personalizzato con MyViewController(meme: meme)
esso non le proprietà di inizializzazione nel mio viewController ...
Stavo cercando di eseguire il debug, ho trovato nel mio viewController, init(coder aDecoder: NSCoder)
viene chiamato prima, quindi il mio init personalizzato viene chiamato in seguito. Tuttavia, questi due metodi di inizializzazione restituiscono self
indirizzi di memoria diversi.
Sospetto che ci sia qualcosa di sbagliato nell'init per il mio viewController, e tornerà sempre self
con init?(coder aDecoder: NSCoder)
, che, non ha alcuna implementazione.
Qualcuno sa come creare correttamente un init personalizzato per il tuo viewController? Nota: l'interfaccia del mio viewController è impostata nello storyboard
ecco il mio codice 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)
}
}