2012-02-05 108 views
0

我在我的程序中使用UINavigationController時,當我位於導航堆棧中的第四或第五個控制器上時,程序收到內存警告並且我不能倒退。我按回來按鈕,導航欄動畫正在發生,但控制器沒有被彈出,我仍然看到舊視圖。任何人都可以幫我處理這個問題嗎?內存警告後導航控制器堆棧問題

我的子視圖具有性能:

@property (nonatomic,retain) UITableView *searchTableView; 
@property (nonatomic,retain) UISegmentedControl *categorySegmentedControl; 
@property (nonatomic,retain) UISearchBar *searchTableBar; 
@property (nonatomic,retain) UIView *footerView; 
@property (nonatomic,retain) UINavigationItem *navigationItem; 

我viewDidUnload方法

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    self.searchTableView = nil; 
    self.categorySegmentedControl = nil; 
    self.searchTableBar = nil; 
    self.navigationItem = nil; 
    self.footerView = nil; 
} 

我的dealloc

-(void)dealloc 
{ 
    [super dealloc]; 
    [searchTableView release]; 
    [categorySegmentedControl release]; 
    [searchTableBar release]; 
    [navigationItem release]; 
    [footerView release]; 
    [currentValues release]; 
} 

而且我注意到奇怪的規律 - 該錯誤只當我從移動顯示使用標籤欄查看沒有標籤欄的視圖。

+0

你的viewControllers是否正確地處理viewDidLoad和viewDidUnload? – Till 2012-02-05 10:34:37

+0

是的,我有self.myIBOtlet =零在我viewDidUnload – 2012-02-05 10:44:27

回答

1

這聽起來像你可能會在你的控制器的viewDidLoad中做一些設置和/或釋放viewDidUnload中的東西,應該在initWithNibName:bundle和dealloc中完成。

viewDidLoad和viewDidUnload在您的控制器被創建和銷燬時不被調用,它們在您的控制器中的視圖被創建和銷燬時被調用,並且這可能隨時發生,特別是當您在視圖中收到內存警告時控制器在後臺(例如,不是導航控制器中的頂視圖)。

確保您編寫控制器的方式是,如果viewDidUnload被調用,或者viewDidLoad被多次調用,則不會丟失數據或破壞任何內容。

對不起,如果這個答案有點含糊,但如果你發佈視圖控制器的代碼,我可以給你更具體的建議。

+0

我沒有東西鏈接到我的viewDidLoad方法,我的視圖狀態,但我有我的viewDidUnload方法中的所有IBOutlets self.myIBOutlet = nil。 – 2012-02-05 13:10:25

+0

你可能會設置一些事情在你的viewDidUnload不是視圖的零?您應該只在viewDidUnload中將視圖設置爲nil,而不是視圖控制器或其他屬性。試着將你的viewDidUnload方法粘貼到你的問題中,我會看看。 – 2012-02-05 13:13:44

+0

完成,看標題 – 2012-02-05 13:20:33