मैं UIViewController के उपवर्ग के लिए कस्टम इनिट लिखने के लिए समस्या हो रही है, मूल रूप से मैं सीधे संपत्ति सेट करने के बजाय viewController के लिए init विधि के माध्यम से निर्भरता पारित करना चाहता हूं viewControllerB.property = value
इसलिए मैंने अपने viewController के लिए एक कस्टम init बनाया और सुपर नामित init कॉल किया
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
व्यू कंट्रोलर इंटरफ़ेस स्टोरीबोर्ड में रहता है, मैंने कस्टम क्लास के लिए इंटरफेस भी बनाया है। और स्विफ्ट को इस इनिट विधि को कॉल करने की आवश्यकता है, भले ही आप इस पद्धति के भीतर कुछ भी नहीं कर रहे हों। अन्यथा कंपाइलर करेंगे शिकायत ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
समस्या यह है कि जब मैं अपने कस्टम init को कॉल करने की कोशिश MyViewController(meme: meme)
करता हूं, तो यह मेरे viewController में बिल्कुल भी इनिट गुण नहीं है ...
मैं डिबग करने की कोशिश कर रहा था, मैंने अपने व्यू कॉन्ट्रोलर में पाया, init(coder aDecoder: NSCoder)
पहले बुलाया, फिर मेरे कस्टम इनिट को बाद में बुलाया गया। हालाँकि ये दो init मेथड अलग अलग self
मेमोरी एड्रेस को लौटाते हैं ।
मुझे अपने व्यू-कॉन्ट्रोलर के लिए init के साथ कुछ गलत होने का संदेह है, और यह हमेशा self
उस के साथ वापस आ जाएगा init?(coder aDecoder: NSCoder)
, जिसका कोई कार्यान्वयन नहीं है।
क्या किसी को पता है कि आपके दृष्टिकोण के लिए कस्टम init कैसे सही ढंग से बनाने के लिए? नोट: मेरा दृश्यकंट्रोलर का इंटरफ़ेस स्टोरीबोर्ड में सेट है
यहाँ मेरा विचार कोड कोड है:
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)
}
}