【发布时间】:2016-05-20 19:36:08
【问题描述】:
我在为 UIViewController 的子类编写自定义 init 时遇到问题,基本上我想通过 viewController 的 init 方法传递依赖关系,而不是像 viewControllerB.property = value 那样直接设置属性
所以我为我的 viewController 做了一个自定义的 init 并调用了 super 指定的 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 时,它根本不会在我的 viewController 中初始化属性...
我正在尝试调试,我在我的 viewController 中发现,init(coder aDecoder: NSCoder) 首先被调用,然后我的自定义 init 稍后被调用。然而这两个 init 方法返回不同的self 内存地址。
我怀疑我的 viewController 的 init 有问题,它总是会返回 self 和 init?(coder aDecoder: NSCoder),它没有实现。
有谁知道如何正确地为您的 viewController 进行自定义初始化? 注意:我的viewController的界面是在storyboard里设置的
这是我的 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)
}
}
【问题讨论】:
-
您找到解决方案了吗?
标签: ios swift uiviewcontroller initialization