2011-01-09 71 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

相關問題