我在为UIViewController的子类编写自定义init时遇到问题,基本上我想将依赖项通过viewController的init方法传递,而不是像 viewControllerB.property = value
所以我为viewController做了一个自定义的初始化,并调用了超级指定的初始化
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根本没有在viewController中的init属性时...
我正在尝试调试,我在viewController中init(coder aDecoder: NSCoder)
找到它,然后先调用它,然后再调用我的自定义init。但是,这两个init方法返回不同的self
内存地址。
我怀疑有毛病初始化为我的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)
}
}