0

我有一个 navController 和 tableViewController 设置,这样选择一个表格行将在 navController 的堆栈上推送一个详细视图并显示有关所选行的详细信息。在详细视图中,我使用单个 UILabel 来显示信息,并在详细视图控制器的 viewDidLoad 中设置标签文本属性的值。

我第一次选择一行时,详细视图会显示预期的文本。当我返回表格视图并选择不同的行时,详细视图会显示与第一次相同的文本。

我已经看到了一些代码示例,其中详细视图控制器被释放,然后在被推送到 navController 的堆栈后设置为 nil。如果我将它添加到我的代码中,问题就会消失,但我不明白为什么。

有人可以向我解释这里发生了什么吗?

谢谢!

4

1 回答 1

1

-viewDidLoad仅当...好吧,当视图被加载时才被调用。也就是说,当它在内存中创建时,也就是你第一次创建视图控制器。任何基于自定义的输入数据都应该在-viewWillAppear:其中完成,每次将其推送到导航控制器之前都会调用它。

虽然,在一般实践中,我总是在将新的视图控制器压入堆栈后立即释放它,因为它不再属于我,它属于导航控制器。在这种情况下,下次你将它压入堆栈时,它会再次加载视图,因为它是一个新对象。

- (void) tableView:(TableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *screen = [[MyNewViewController alloc] initWithData:[data objectAtIndex:indexPath.row]];
    [self.navigationController pushViewController:screen animated:YES];
    [screen release];
}

但是,主要思想是根据每次看到视图时可能发生变化的数据自定义视图应该在-viewWillAppear:. 比您在 Interface Builder 中更进一步地自定义视图,更改无论您正在查看什么数据都不会改变的东西,应该在-viewDidLoad

于 2009-08-07T14:38:31.697 回答