在其自身内实例化UIViewController的新实例

时间:2009-06-28 19:35:24

标签: iphone uiviewcontroller

我有一个显示项目列表的UIViewController实例。当用户选择一个项目时,我需要创建一个新的UIViewController实例(由不同的项目列表填充)并显示它。 目前我正在从didSelectRowAtIndexPath方法

中调用构造函数
    RootViewController *rootViewController = [[RootViewController alloc]initWithStyle:UITableViewStylePlain];
UIViewController *targetViewController = rootViewController;
[[self navigationController] pushViewController:targetViewController animated:NO];

但是不是创建新对象而是重用当前的对象:新视图包含新列表以及上一个列表中的项目。 那么如何从内部创建一个新的RootViewController实例呢?

2 个答案:

答案 0 :(得分:0)

您正在创建和展示新的视图控制器,您的问题在其他地方。

你在哪里保存表的数据?

你的代码确实创建了一个新的实例,但是很明显,在创建之后你并没有告诉新的视图控制器要显示什么 - 这意味着你从一些更全局的源获取数据,你必须只附加将新数据上传到。

答案 1 :(得分:0)

真的含糊地说:

1)将您的第二级头文件导入此实现文件。回到第二级有吸气剂/安装者。在你的第一级添加另一个方法, - (BOOL)set2ndLevelDataBasedOnXMLSource:(id)source在这个方法中设置适当的实例变量并进行计算来设置数据。

2)didSelectRow中的代码应如下所示:

    if(!rootViewController) {
RootView *rootViewController = [[RootView alloc] initWithstyel...]; }

BOOL result = [self set2ndLevelDataBasedOnXMLSource:_Source_];

if(result) {
[[self navigationController] pushViewController:targetViewController animated:NO]; }

然后你可以重构它:

if([self set2ndLevelDataBasedOnXMLSource:_Source_])  {
[[self navigationController] pushViewController:targetViewController animated:NO]; }

3)in - (BOOL)set2ndLevelDataBasedOnXMLSource:(id)source {

我有:

NSUInteger result;
if(source == true) {

2ndLevelController.section1data = [source (parse for)...];

2ndLevelController.section2data = [source (parse for ...)];

...

result = 1; }
else { result = 0; }

return result;

4)在我的第二级,在viewWillDisappear下我将所有这些实例变量设置为nil(它们是可变数组)

我就是这样做的。