Sto avendo problema per la scrittura di init personalizzato per sottoclasse di UIViewController, fondamentalmente voglio passare la dipendenza attraverso il metodo init per viewController piuttosto che impostare immobile direttamente come viewControllerB.property = value
init personalizzato per UIViewController a Swift con l'installazione interfaccia storyboard
Così ho fatto un'init personalizzato per il mio viewController e chiamare super-designato init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
l'interfaccia controller della vista risiede nella storyboard, ho anche rendere l'interfaccia per la classe personalizzata per essere il mio controller della vista. E Swift richiede di chiamare questo metodo init anche se non stai facendo nulla all'interno di questo metodo. In caso contrario, il compilatore si lamenterà ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Il problema è quando provo a chiamare mia abitudine init con MyViewController(meme: meme)
non init immobili a mia viewController a tutti ...
stavo cercando di debug, ho trovato nel mio viewController, init(coder aDecoder: NSCoder)
viene chiamato prima, poi il mio init personalizzato viene chiamato più tardi. Tuttavia questi due metodi init restituiscono diversi indirizzi di memoria self
.
Sto sospettando qualcosa di sbagliato con init per my viewController, e restituirà sempre self
con il init?(coder aDecoder: NSCoder)
, che non ha implementazione.
Qualcuno sa come eseguire correttamente init personalizzati per viewController? Nota: l'interfaccia di mio viewController è impostato in storyboard
qui è 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)
}
}
sei arrivato una soluzione per questo? – user481610