我有一个显示项目列表的UIViewController实例。当用户选择一个项目时,我需要创建一个新的UIViewController实例(由不同的项目列表填充)并显示它。 目前我正在从didSelectRowAtIndexPath方法
中调用构造函数 RootViewController *rootViewController = [[RootViewController alloc]initWithStyle:UITableViewStylePlain];
UIViewController *targetViewController = rootViewController;
[[self navigationController] pushViewController:targetViewController animated:NO];
但是不是创建新对象而是重用当前的对象:新视图包含新列表以及上一个列表中的项目。 那么如何从内部创建一个新的RootViewController实例呢?
答案 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(它们是可变数组)
我就是这样做的。