這似乎出現在我們項目中的兩個控制器上。 我檢查了代碼和故事板,故事板中的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