2009-07-23 88 views
1

我正在創建一個自定義的ViewController。這個VC需要加載一些在創建它的事件中已知的數據,並將其推送到它將要成爲的一部分的NavigationController的頂部。Cocoa Touch UIViewController屬性和類設計

我的問題是,我應該如何將處理自定義ViewController創建的視圖中的數據傳遞到該自定義ViewController中。

我想到了四種可能的選擇,並且我希望得到關於爲什麼每個功能都很好的反饋。

1)在自定義ViewController中公開屬性,並根據這些屬性在 - (void)ViewDidLoad中設置UI元素。

2)在創建ViewController時,公開它們自己的實際UI元素並設置它們的.text/.image/.whatever屬性。

3)創建自定義視圖的自定義的構造,並通過在我需要設置的UI元素

4)創建兩個視圖可以訪問自定義模型的值,則CustomView之前設置數據被創建/推送,並訪問ViewDidLoad事件中的數據。

我對這一切仍然陌生,我想確保我理解這些數據切換的正確處理。看起來像這樣的可能是一個簡單的答案,但我仍然有點困惑,它可能真的很重要,這樣做是正確的,以避免記憶丟失/泄漏。

另外,如果有人在乎,我在iTunes U和Mark/Lamarche的「Beginning iPhone Development」上使用斯坦福大學的CS193p課程,爲iPhone自學可可。我正在使用NavigationController和一些ViewControllers(如果您熟悉193p,則使用Presence 1)開發應用程序。

回答

1

嗯,我認爲根據您的要求,每種方法都有其優點& ......經常需要一些方法的組合。無論如何,我相信對我來說最常見的就是做足這樣的事情,讓它開始。

MyViewController *vc = [[MyViewController alloc] init]; // (or initWithNibName:bundle:) 
// transfer vc values here 
vc.value1 = aValue; 
vc.value2 = anotherValue; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

當你的視圖控制器被實例化後,你有機會傳遞對象給它。說MyViewController是一個細節視圖,然後你會給它的對象,它將顯示的細節。或者,如果它是一個表格視圖,你可以給它NSArray它需要顯示。然後在viewDidLoad或awakeFromNib或awakeFromCoder中,或者...你可以填寫視圖...可以這麼說。

1

#1是好的,帶或不帶#3(這兩個不是相互排斥的)

#4是我的首選方案。舉例來說,如果我有一個UserViewController,我可能還要有一個用戶對象,並創建這樣說:

User *user = [self.users objectAtIndex:someIndex]; 
UserViewController *uvc = [[[UserViewController alloc] initWithUser:user] autorelease]; 

#2是不是一個好主意。對象不應該訪問其他對象的UI元素。當你決定改變你的用戶界面(你會的)時,這會帶來很多麻煩。