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