2011-03-17 37 views
2

我有一些非常簡單的代碼,我使用UINavigationController並添加一個rootViewController。在發生了一些處理後,我想彈出當前的視圖控制器並將其替換爲另一個視圖控制器。這似乎工作正常,但我原來的視圖控制器不dealloc。我在它的dealloc中設置了一個斷點,它永遠不會被擊中。以下是我的代碼。不知道爲什麼會發生。只是爲了測試,如果我釋放startController兩次,它會消失。NavigationController initWithRootViewController dealloc

StartViewController *startController = [[StartViewController alloc] initWithNibName:@"StartViewController" bundle:[NSBundle mainBundle]]; 

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:startController]; 
    [nav pushViewController:startController animated:NO]; 

    self.navController = nav; 

    [startController release]; 
    [nav release]; 

感謝任何幫助。

+1

@ user665003:你的navController屬性是如何定義的? – Oliver 2011-03-17 20:18:54

回答

1

您的最終目標是將視圖控制器的保留計數歸零。因此,請確保視圖保留的所有內容都已發佈,並保留視圖的任何位置。

請檢查以下可能的原因:

  1. 確保您彈出從navController視圖控制器,如果你有一個自定義後退按鈕。默認的後退按鈕將正常工作。

  2. 確保所有IBOutlets都設置爲無在viewDidUnload

    - (void)viewDidUnload 
    { 
        [super viewDidUnload]; 
        self.webView = nil; 
    } 
    
  3. 如果你的觀點是觀察員模型類接收事件

例如

model.addObserver(myView); 

並肯定還會做

model.removeObserver(myView); 

我希望這會有所幫助。

+0

感謝您的回覆,我真的很感激它。它給我帶來了另一個方向,最終導致瞭解決方案。我是一個非常新的iPhone開發,事實證明,我試圖彈出rootViewController。我現在知道你不能這樣做。再次感謝 – 2011-03-18 15:56:46

0

它看起來好像你的self.navController有一個對它的持有引用。也許把

self.navController =nil; 

適當的地方,以便當視圖已被彈出它被釋放。

0

我試圖彈出根視圖控制器。我改用UINavigationController對象的setViewControllers消息來替換我所有的視圖控制器。