0

我有一個UIViewControllers數組,我在UINavigationController的根視圖控制器中顯示...我有一個我推入堆棧的控制器的問題。每次viewDidLoad需要呈現一個UIImagePickerController,但是隻有在第一次push時纔會這樣做。爲了解決這個問題我在我的根視圖控制器實現UINavigationControllerDelegate:ViewController的生命週期UINavigationController

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    [viewController viewDidAppear:animated]; 
} 

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    [viewController viewWillAppear:animated]; 
} 

的問題是它調用這些消息的第一推兩次......否則將是巨大的。我錯過了什麼?

回答

0

您可能想在viewDidAppear中顯示UIImagePickerController:而不是viewDidLoad :.由於您將視圖控制器保存在一個數組中,因此它們僅實例化一次,因此viewDidLoad:很可能只會在每個視圖控制器上調用一次。 viewDidAppear:每次推送或呈現視圖控制器時都會調用。

如果你的應用程序進入低內存的情況,有可能viewDidUnload:會在某個時候被調用,導致viewDidLoad:在稍後的某個點再次被調用,但你不能依賴這個。