ฉันมีปัญหาในการเขียน init ที่กำหนดเองสำหรับคลาสย่อยของ UIViewController โดยพื้นฐานแล้วฉันต้องการส่งการอ้างอิงผ่านเมธอด init สำหรับ viewController แทนที่จะตั้งค่าคุณสมบัติโดยตรงเช่น viewControllerB.property = value
ดังนั้นฉันจึงสร้าง init ที่กำหนดเองสำหรับ viewController ของฉันและเรียกใช้ super ที่กำหนด
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
อินเทอร์เฟซตัวควบคุมมุมมองอยู่ในสตอรีบอร์ดฉันยังทำให้อินเทอร์เฟซสำหรับคลาสที่กำหนดเองเป็นตัวควบคุมมุมมองของฉัน และ Swift จำเป็นต้องเรียกวิธีการเริ่มต้นนี้แม้ว่าคุณจะไม่ได้ทำอะไรภายในวิธีนี้ก็ตาม ไม่งั้นคอมเพลนจะบ่น ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
ปัญหาคือเมื่อฉันพยายามเรียกใช้ init ที่กำหนดเองของฉันโดยMyViewController(meme: meme)
ไม่ได้ init คุณสมบัติใน viewController เลย ...
ฉันกำลังพยายามดีบักฉันพบใน viewController ของฉันinit(coder aDecoder: NSCoder)
เรียกก่อนจากนั้นจึงเรียก init ที่กำหนดเองของฉันในภายหลัง อย่างไรก็ตามวิธีการ init ทั้งสองนี้ส่งคืนself
ที่อยู่หน่วยความจำที่แตกต่างกัน
ฉันสงสัยว่ามีบางอย่างผิดปกติกับ init สำหรับ viewController ของฉันและมันจะกลับมาself
พร้อมกับinit?(coder aDecoder: NSCoder)
ซึ่งไม่มีการนำไปใช้งานเสมอ
ไม่มีใครรู้วิธีสร้างกำหนดเองสำหรับ 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)
}
}