Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch Cocoa Touch UIViewController属性和类设计_Cocoa Touch_Uiviewcontroller - Fatal编程技术网

Cocoa touch Cocoa Touch UIViewController属性和类设计

Cocoa touch Cocoa Touch UIViewController属性和类设计,cocoa-touch,uiviewcontroller,Cocoa Touch,Uiviewcontroller,我正在创建一个自定义ViewController。这个VC需要加载一些在创建它的事件中已知的数据,并将其推送到它将要成为其中一部分的NavigationController的顶部 我的问题是,如何将处理自定义ViewController创建的视图中的数据传递到该自定义ViewController中 我已经想到了四种可能的选择,我希望得到反馈,说明为什么每一种都适合这个功能 1) 公开自定义ViewController中的公共属性,并基于-(void)ViewDidLoad中的这些属性设置视图中的

我正在创建一个自定义ViewController。这个VC需要加载一些在创建它的事件中已知的数据,并将其推送到它将要成为其中一部分的NavigationController的顶部

我的问题是,如何将处理自定义ViewController创建的视图中的数据传递到该自定义ViewController中

我已经想到了四种可能的选择,我希望得到反馈,说明为什么每一种都适合这个功能

1) 公开自定义ViewController中的公共属性,并基于-(void)ViewDidLoad中的这些属性设置视图中的UI元素

2) 公开实际的UI元素本身,并在创建ViewController时设置它们的.text/.image/.任何属性

3) 为自定义视图创建自定义构造函数,并传入设置UI元素所需的值

4) 创建两个视图都有权访问的自定义模型,在创建/推送自定义视图之前设置数据,并在ViewDidLoad事件中访问该数据

我对这一切还是新手,我想确保我了解这些数据的正确处理。这似乎是一个简单的答案,但我还是有点困惑,正确地做这件事可能真的很重要,以避免内存丢失/泄漏


另外,如果有人关心的话,我正在使用斯坦福大学在iTunes U上的CS193p课程和马克/拉马尔奇的“开始iPhone开发”来自学iPhone。我正在开发一个带有NavigationController和两个ViewController的应用程序(如果您熟悉193p,请参阅状态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可以,有或没有#3(这两者并不相互排斥)

#4是我首选的解决方案。例如,如果我有一个UserViewController,我可能还希望有一个User对象,并以这种方式创建它:

User *user = [self.users objectAtIndex:someIndex];
UserViewController *uvc = [[[UserViewController alloc] initWithUser:user] autorelease];
#2不是个好主意。对象不应访问其他对象的UI元素。当你决定改变你的用户界面(你会改变的)时,很多麻烦就来了