我在编写UIViewController的子类自定义init方法时遇到了问题,基本上我想通过viewController的init方法传递依赖项,而不是像viewControllerB.property = value
那样直接设置属性。
因此,我为我的viewController创建了一个自定义的init方法,并调用了超级指定的init方法。
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
视图控制器接口位于故事板中,我还为自定义类创建了界面以成为我的视图控制器。而且即使你在这个方法中什么也不做,Swift也要求调用这个init方法。否则编译器会抱怨...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
问题在于当我尝试使用 MyViewController(meme: meme)
调用自定义的初始化方法时,它根本没有初始化视图控制器中的属性...
我试图进行调试,发现在我的视图控制器中,init(coder aDecoder: NSCoder)
首先被调用,然后才调用我的自定义初始化方法。但是这两个初始化方法返回不同的 self
内存地址。
我怀疑我的视图控制器的初始化方法有问题,并且它将始终使用 init?(coder aDecoder: NSCoder)
返回 self
,而该方法没有实现。
有人知道如何正确地为您的视图控制器创建自定义初始化方法吗? 注意:我的视图控制器的界面是在 storyboard 中设置的。
这是我的视图控制器代码:
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)
}
}