2013-04-23 80 views
2

我在我的主ViewController中初始化表,數據等。對於更多的設置,我想打電話給另一個視圖控制器具有:有沒有一種方法可以避免在每個segue後調用viewDidLoad?

DateChangeController *theController = [self.storyboard instantiateViewControllerWithIdentifier:@"dateChangeController"]; 
[self presentViewController:theController animated:YES completion:^{NSLog(@"View controller presented.");}]; 

而且一些點擊後,我用回賽格瑞(定製:)

NSLog(@"Scroll to Ticket"); 
[self.sourceViewController presentModalViewController:self.destinationViewController animated:YES]; 

我的問題:

回國後,我主要的ViewController,viewDidLoad被調用(每次)。我讀到,ARC釋放我的mainView後「去」其他ViewController和調用viewDidUnload方法,但我想保留我開始初始化我所有的數據和表格。

任何解決方案?非常感謝你!

回答

5

的問題是,你正在做的:儘管在你的口頭描述您使用「回到我的主視圖控制器」的字樣

main view controller -> 
    date change controller -> 
     a *different* main view controller 

換句話說,你是在事實上恢復沒有;您正在向前移動到另一個另一個此主視圖控制器的實例,每次將所有這些視圖控制器堆疊在一起。

回到現有的視圖控制器的方式不是讓一個繼續,但返回! presentViewController的退貨是dismissViewController。你不使用segue;你只需撥打dismissViewController即可。 (好吧,在iOS 6中,你可以實際上使用SEGUE,但它是一個非常特殊和相當複雜的一種賽格瑞的稱爲放鬆或退出SEGUE)

如果你這樣做,你會回來的在你的舊視圖控制器,一直坐在那裏等你的回報,並且viewDidLoad將不會被調用。

因此,這是一個很好的問題,因爲viewDidLoad的雙重號召是你的標誌,你的架構是完全錯誤的。

+0

如何移動和返回一個呈現的視圖控制器:http://www.apeth.com/iOSBook/ch19.html# _presented_view_controller – matt 2013-04-23 18:09:12

+0

如何製作和使用unwind segue:http://www.apeth.com/iOSBook/ch19.html#_unwind_segues – matt 2013-04-23 18:09:39

+0

完美的答案,這是正確的解決方案,它的工作原理!非常感謝你! – Jonathan 2013-04-23 18:15:37

0

我認爲你採取了錯誤的方法 - viewDidLoad應該在被調用時被調用 - 它是通知您視圖正在刷新或初始加載。你想要做的是將表初始化代碼移動到其他位置,或者至少設置一個布爾變量,以便只調用一次。在第一次調用viewDidLoad時創建一個包含表數據的對象,然後檢查它是否已被調用?

+0

是的,我的解決方案也一樣,但我認爲,這將是「糟糕的編程」 – Jonathan 2013-04-23 18:01:54

相關問題