0

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

    RootViewController *rootViewController = [[RootViewController alloc]initWithStyle:UITableViewStylePlain];
UIViewController *targetViewController = rootViewController;
[[self navigationController] pushViewController:targetViewController animated:NO];

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

4

2 回答 2

0

您正在创建并呈现一个新的视图控制器,您的问题在其他地方。

您将表格的数据保存在哪里?

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

于 2009-06-28T20:41:35.073 回答
0

真的很模糊:

1)将您的第二级头文件导入此实现文件。回到第 2 级有 getter/setter。在您的第一级添加另一个方法, -(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) 在 -(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(它们是可变数组)

我就是这样做的。

于 2009-09-27T01:44:59.203 回答