每当我在栈上推一个视图控件时,如何从appDelegate重新加载视图控制器?
问题描述:
目前我的应用程序有一个导航屏幕,允许用户选择其他视图。点击时,navController只是推送特定的视图控制器。如果我再也不会再次回到相同的视图,期待它被重新加载,那么这很好用。每当我在栈上推一个视图控件时,如何从appDelegate重新加载视图控制器?
在下面的代码中,当请求时推送视图控制器。
- (void)optionClicked:(NSString *)optionName
{
if ([@"First" isEqualToString:optionName]) {
[navController pushViewController:firstController animated:YES];
} else if ([@"Next" isEqualToString:optionName]) {
[navController pushViewController:nextController animated:YES];
}
}
当完成一个视图,我只是从堆栈中弹出它。但下次用户从菜单中选择相同的选项时,它不会被加载为“干净”,这就是我的问题出现的地方。每次将它推入堆栈时,如何加载视图控制器?
答
您必须重新初始化视图控制器。
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中发布。)
我添加了一个属性(非原子,保留)就像你提到的 - 我应该把自己。在firstController的整个前面?或只是当我初始化它,如你所示? – 2011-01-09 15:55:38