У меня проблема с написанием пользовательского init для подкласса UIViewController, в основном я хочу передать зависимость через метод init для viewController, а не устанавливать свойство напрямую, например viewControllerB.property = value
Итак, я сделал собственный init для моего viewController и вызвал супер назначенный init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
Интерфейс контроллера представления находится в раскадровке, я также сделал интерфейс для настраиваемого класса моим контроллером представления. Swift требует вызова этого метода инициализации, даже если вы ничего не делаете в этом методе. Иначе компилятор пожалуется ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Проблема в том, что когда я пытаюсь вызвать свой собственный init, MyViewController(meme: meme)
он вообще не запускает свойства в моем viewController ...
Я пытался отладить, я обнаружил в своем viewController, init(coder aDecoder: NSCoder)
сначала вызывается , а затем мой собственный init вызывается позже. Однако эти два метода инициализации возвращают разные self
адреса памяти.
Я заподозрив что - то не так с моей инициализации для ViewController, и он всегда будет возвращаться self
с init?(coder aDecoder: NSCoder)
, который не имеет реализации.
Кто-нибудь знает, как правильно сделать собственный init для вашего viewController? Примечание: мой интерфейс viewController настроен в раскадровке
вот мой код 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)
}
}