Saya mengalami masalah untuk menulis init kustom untuk subclass UIViewController, pada dasarnya saya ingin meneruskan ketergantungan melalui metode init untuk viewController daripada mengatur properti secara langsung seperti viewControllerB.property = value
Jadi saya membuat init khusus untuk viewController saya dan memanggil init yang ditunjuk super
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
Antarmuka pengontrol tampilan berada di papan cerita, saya juga membuat antarmuka untuk kelas khusus menjadi pengontrol tampilan saya. Dan Swift perlu memanggil metode init ini meskipun Anda tidak melakukan apa pun dalam metode ini. Jika tidak, kompilator akan mengeluh ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Masalahnya adalah ketika saya mencoba memanggil init kustom saya dengan MyViewController(meme: meme)
itu tidak init properti di viewController saya sama sekali ...
Saya mencoba men-debug, saya menemukan di viewController saya, init(coder aDecoder: NSCoder)
dipanggil terlebih dahulu, kemudian init kustom saya dipanggil nanti. Namun kedua metode init ini mengembalikan self
alamat memori yang berbeda .
Saya mencurigai ada yang salah dengan init untuk viewController saya, dan itu akan selalu kembali self
dengan init?(coder aDecoder: NSCoder)
, yang, tidak memiliki implementasi.
Apakah ada yang tahu cara membuat init kustom untuk viewController Anda dengan benar? Catatan: antarmuka viewController saya diatur di storyboard
berikut adalah kode viewController saya:
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)
}
}