当我的 View Controller 首次出现时,我希望它有可能更新为该 View 提供数据的缓存。但是,当用户从更深的 View Controller 点击后退按钮返回到该 View Controller 时,我不想再次更新缓存。
我应该使用哪个事件?
- 在
init
中,我还没有我需要的所有参数。 viewWillAppear
将在每次 View 出现时触发。viewDidLoad
将在每次从 nib 加载 View 时触发,我相信如果出现内存警告,这可能会发生第二次。 (或者这是错误的?)由于这不是内存驻留缓存,因此处理这个问题的地方似乎是错误的。- 让调用者调用一些额外的东西是不优雅的,如果有一个内置的方法来处理这个。
澄清一下,这不是内存驻留缓存。这是将 XML 文件解析为二进制文件。二进制文件在 viewDidLoad
和 viewDidUnload
中加载和卸载。这是该步骤的先决条件,确保二进制文件在加载之前是最新的。
最佳答案
使用 init
可能有用,但我会推荐一个简单的子类 UINavigationController
.创建一个名为 setRootTableViewController:(UITableViewController *)controller
的新方法, 或类似的东西。在方法实现中调用这个:
[controller.tableView reloadData];
[self pushViewController:controller animated:NO];
reloadData
将调用所有委托(delegate)和数据源方法,并使用它们更新表。如果你想在你的 TableView Controller 上调用一个特殊的方法,你可以将方法声明更改为 setRootTableViewController:(CustomTableViewController *)controller
(或任何你的自定义表 Controller 被调用),并替换 reloadData
与调用该方法的方法一致。
然后,在您的应用委托(delegate)中,而不是创建 UINavigationController
并添加您的自定义 View Controller ,创建其中一个,然后调用此方法添加第一个 View 。
但是,如果您使用 Nib 来设置 rootViewController
, 你可以覆盖 initWithRootViewController:(UIViewController *)controller
,正如我想象的那样,nib 将调用它来设置堆栈中的第一个 View :
- (id)initWithRootViewController:(UIViewController *)rootViewController {
if ((self = [super init])) {
[(CustomController *)rootViewController doSomethingSpecial];
[self pushViewController:rootViewController];
}
}
希望这对您有所帮助!
关于ios - 在 UINavigationController 中首次加载 View Controller 的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7421703/