目前,我的应用程序有一个导航屏幕,允许用户选择其他视图。单击时,navController只会按下相关的特定视图控制器。如果我再也没有回到相同的视图期望它重新加载,那么这很有用。
在下面的代码中,我会在请求时推送视图控制器。
- (void)optionClicked:(NSString *)optionName
{
if ([@"First" isEqualToString:optionName]) {
[navController pushViewController:firstController animated:YES];
} else if ([@"Next" isEqualToString:optionName]) {
[navController pushViewController:nextController animated:YES];
}
}
完成视图后,我只是从堆栈中弹出它。但是当用户下次从菜单中选择相同的选项时,它不会被加载“干净”,这就是我的问题所在。如何在每次将其推入堆栈时加载视图控制器?
答案 0 :(得分:2)
您必须重新初始化viewcontroller。
if ([@"First" isEqualToString:optionName]) {
if (firstController)
{ [firstController release]; } // assuming you've got a retain on it.
firstController = [[MyViewControllerSubclass alloc] init];
[navController pushViewController:firstController animated:YES];
}
在这种情况下,我建议使用保留的属性。 @property (nonatomic, retain) MyViewControllerSubclass *firstController;
这样你可以使用self.firstController = [[[MyViewControllerSubclass alloc] init] autorelease];
并且内存管理主要是为你完成的。 (虽然你仍然需要在dealloc中发布。)