这似乎出现在我们项目中的两个控制器上。 我检查了代码和故事板,故事板中的segue没有在控制器中调用,没有IBAction也没有与触发segue的按钮相关的IBOutlet。 尽管当我离开我的控制器时,我可以从打印中看到deinit方法被调用两次。Deinit调用两次
这很奇怪,因为viewDidLoad和viewWillDisappear只被调用一次,有没有人遇到过这种行为?没有任何关于SO的双重优惠,我非常想知道发生了什么。
编辑:所以,小小的更新。 我加了这段代码,我设置一个断点来检查当控制器初始化:
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init(coder aDecoder: NSCoder) {
print("init coder style")
super.init(coder: aDecoder)!
}
当我触发SEGUE要到我的控制器,以便初始化编码器被调用一次,当我轻按所述控制器的确定按钮被插入到popSegue中,然后我的控制器再次初始化(也用init编码器),然后发生双重初始化。
那么发生什么事是我的控制器的空实例被创建时,我用popSegue解雇它。我不明白为什么。
你可以发布两个视图控制器的相关代码吗?很难推测没有任何背景或代码的背后原因。 – idocode
事情是,没有代码,只有一个UIButton连接到一个导致故事板引用的segue。 我没有在代码的任何地方调用performSegueWithIdentifier,也没有做任何手动实例化。 与此控制器相关的唯一代码位于prepareForSegue中,如果segue的标识符匹配,我使用它来设置代理。 另外,捕获自己来设置委托的var是一个弱变量,所以没有强大的参考周期的理由。 –
“我也不会做任何手动实例化”我想你会这样做。 – matt