Tôi đang gặp sự cố khi viết init tùy chỉnh cho lớp con của UIViewController, về cơ bản tôi muốn chuyển phụ thuộc thông qua phương thức init cho viewController hơn là đặt thuộc tính trực tiếp như viewControllerB.property = value
Vì vậy, tôi đã tạo một init tùy chỉnh cho viewController của mình và gọi init siêu được chỉ định
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
Giao diện bộ điều khiển chế độ xem nằm trong bảng phân cảnh, tôi cũng đã tạo giao diện cho lớp tùy chỉnh làm bộ điều khiển chế độ xem của tôi. Và Swift yêu cầu gọi phương thức init này ngay cả khi bạn không làm gì trong phương thức này. Nếu không trình biên dịch sẽ phàn nàn ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Vấn đề là khi tôi cố gắng gọi init tùy chỉnh của mình với MyViewController(meme: meme)
nó không init thuộc tính nào trong viewController của tôi ...
Tôi đang cố gắng gỡ lỗi, tôi thấy trong viewController của mình, init(coder aDecoder: NSCoder)
được gọi trước, sau đó đơn vị tùy chỉnh của tôi được gọi sau. Tuy nhiên, hai phương thức init này trả về self
địa chỉ bộ nhớ khác nhau .
Tôi đang nghi ngờ có điều gì đó không ổn với init cho viewController của mình và nó sẽ luôn trả về self
với init?(coder aDecoder: NSCoder)
, mà không có triển khai.
Có ai biết cách tạo init tùy chỉnh cho viewController của bạn một cách chính xác không? Lưu ý: giao diện viewController của tôi được thiết lập trong bảng phân cảnh
đây là mã viewController của tôi:
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)
}
}