UIViewController alt sınıfı için özel init yazmakla ilgili sorun yaşıyorum, temelde özelliği doğrudan aşağıdaki gibi ayarlamak yerine, bağımlılığı viewController için init yöntemiyle geçirmek istiyorum. viewControllerB.property = value
Bu yüzden, viewController'ım için özel bir init yaptım ve süper belirlenmiş init'i çağırdım
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
Görünüm denetleyici arabirimi film şeridinde bulunur, ayrıca özel sınıf için arabirimi görünüm denetleyicim olacak şekilde yaptım. Ve Swift, bu yöntem dahilinde hiçbir şey yapmasanız bile bu init yöntemini çağırmayı gerektirir. Aksi takdirde derleyici şikayet edecek ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Sorun, özel initimi çağırmaya çalıştığımda MyViewController(meme: meme)
initimi çağırmaya çalıştığımda, viewController'imdeki özellikleri hiç başlatmıyor ...
Hata ayıklamaya çalışıyordum, viewController'imde buldum, init(coder aDecoder: NSCoder)
önce çağrıldı, sonra özel init'im daha sonra çağrıldı. Ancak bu iki init yöntemi farklıself
bellek adresleri .
ViewController'ımın init'inde bir sorun olduğundan şüpheleniyorum ve her zaman , uygulaması olmayan olan self
ile geri dönecektir init?(coder aDecoder: NSCoder)
.
ViewController'ınız için özel init yapmayı doğru bir şekilde bilen var mı? Not: viewController arayüzüm film şeridinde ayarlandı
İşte viewController kodum:
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)
}
}