2011-01-09 70 views
0

目前我的应用程序有一个导航屏幕,允许用户选择其他视图。点击时,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]; 
    } 
} 

当完成一个视图,我只是从堆栈中弹出它。但下次用户从菜单中选择相同的选项时,它不会被加载为“干净”,这就是我的问题出现的地方。每次将它推入堆栈时,如何加载视图控制器?

回答

2

您必须重新初始化视图控制器。

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中发布。)

+0

我添加了一个属性(非原子,保留)就像你提到的 - 我应该把自己。在firstController的整个前面?或只是当我初始化它,如你所示? – 2011-01-09 15:55:38

相关问题