2013-05-07 97 views
1

我在使用iOS時遇到了一些問題。我使用協議在兩個視圖控制器之間來回傳遞數據,並手動切換視圖。我的問題是,當我關閉頂部視圖時,不會再次調用底部視圖的viewDidLoad。由於我從第二個視圖向第一個視圖發送信息,因此我需要調用viewDidLoad,以便處理我傳遞的信息。如果你對如何做到這一點有任何想法,任何幫助表示讚賞。謝謝。如何手動調用viewDidLoad?

+0

另一種可能解決方案是讓這兩個視圖控制器共享相同的模型,但我不確定如何做到這一點。 – CoffeeIsProgramming 2013-05-07 01:53:30

+2

將您的邏輯移出viewDidLoad。你不應該這樣稱呼它。一個更好的地方可能是viewDidAppear :,但實際上,因爲你已經有了一個用於通信的協議,所以最好的地方是使用該協議來傳達一些改變。然後第一個視圖將負責在接收到該協議消息時自行更新。 – Anurag 2013-05-07 01:55:06

回答

2

使用viewDidLoad-(void)viewDidAppear:(BOOL)animated代替

+0

還有一件事,當我調用一個函數時,我的協議正在返回一個空值。這有什麼共同的原因嗎? – CoffeeIsProgramming 2013-05-07 02:09:54

+0

@Adam請張貼一些代碼(也許是另一個問題)。很難說這個信息 – 2013-05-07 03:01:40

1

我傳遞數據來回使用協議的兩個視圖控制器和手動切換視圖之間。我的問題是,當我關閉頂部視圖時,不會再次調用底部視圖的viewDidLoad。因爲我是從我的第二個觀點將信息發送到我的第一個觀點,我需要viewDidLoad中被稱爲

不,你不這樣做,你認爲你做的事實,讓我想到別的可能會錯誤這裏。

考慮一下:如果你是真正的從第二視圖控制器將數據傳回從第一,那麼第一個視圖控制器的數據,現在可以自行更新。它存在,它有一個觀點。所以它應該在現場更新自己,因爲您將數據傳遞給它。然後,當您關閉第二個視圖控制器時,第一個視圖控制器的視圖將會出現 - 已經更新。實際上,解散第二個視圖控制器只是揭示了第一個視圖控制器的視圖,它一直存在,並且即使它沒有顯示也被更新。

+0

嗯,事情是我需要一個地方來「處理」正在傳回的數據。舉例來說,我將它傳遞給一個字符串數組,我想對它做一些事情,比如將它傳遞給模型。我怎麼做,如果不在viewDidLoad?調用觸摸事件以將視圖放置在前景中。在我打電話來介紹第二個視圖之後,我是否可以在這個觸摸事件中處理它? – CoffeeIsProgramming 2013-05-07 02:11:38

+1

如果您確實傳回數據,則通過調用第一個視圖控制器上的方法來完成此操作。所以現在第一個視圖控制器正在運行!它以某種方法接收字符串數組,並可以在該方法中執行任何操作。 – matt 2013-05-07 02:13:14

+0

就是這樣。我的觸摸事件調用了我的第一個視圖。然後,我點擊第二個視圖上的按鈕,即設置了某個特定的數據。當第二個視圖被解散時,我想讓這些數據通過。 – CoffeeIsProgramming 2013-05-07 02:18:41

10
- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

只有當視圖控制器首次加載到內存中時才被調用一次。這是您想要實例化任何實例變量並構建任何視圖,這些視圖在該視圖控制器的整個生命週期中都存在。

- (void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
} 

被調用時的觀點實際上是可見的,並且可以在視圖控制器的生命週期中被多次調用(當模態視圖控制器駁回例如,視圖再次變得可見)