У мене проблема з написанням власного 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 налаштовано на розкадровці
ось мій 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)
}
}