2009-07-23 26 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元素。当你决定改变你的用户界面(你会的)时,这会带来很多麻烦。