1

我有我的iPhone應用程序的結構如下父視圖

的AppDelegate /的UITabBarController/5 UINavigationControllers(我的標籤)/UIViewController中(如RootViewController的每一個的UINavigationController)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    HomeViewController *homeViewController = [[HomeViewController alloc] init]; 
    GoalsTableViewController *goalsTableViewController = [[GoalsTableViewController alloc] init]; 
    HistoryViewController *historyViewController = [[HistoryViewController alloc] init]; 
    SettingsViewController *settingsViewController = [[SettingsViewController alloc] init]; 
    InfoViewController *infoViewController = [[InfoViewController alloc] init]; 

    self.tabBarController = [[UITabBarController alloc] init]; 
    self.tabBarController.delegate = self; 

    self.navBarActivity = [[UINavigationController alloc] initWithRootViewController:homeViewController]; 

    self.navBarSettings = [[UINavigationController alloc] initWithRootViewController:settingsViewController]; 

    self.navBarHistory = [[UINavigationController alloc] initWithRootViewController:historyViewController]; 

    self.navBarGoals = [[UINavigationController alloc] initWithRootViewController:goalsTableViewController]; 

    self.navBarAbout = [[UINavigationController alloc] initWithRootViewController:infoViewController]; 

    self.tabBarController.viewControllers = [NSArray arrayWithObjects:self.navBarActivity, self.navBarGoals, self.navBarHistory,self.navBarSettings, self.navBarAbout, nil]; 

    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 

    return YES; 

} 

在一些UIViewControllers我以發送電子郵件實現的MFMailComposeViewController。

我嘗試一個奇怪的問題(在模擬器和實際設備的iOS 5.0和5.1轉載)...

使用iPhone模擬器(僅限iOS 5.0或5.1),如果我模仿而MFMailComposerViewController內存不足的警告模態在屏幕上打開,然後點擊取消,然後點擊刪除|保存草稿,當模式被解除時,父視圖看起來不可見(空白視圖)。

生命週期似乎工作正常,如果我遵循相同的步驟,但模擬低內存警告後,我從MFMailComposeViewController模式發送電子郵件,當模式被解僱,我的父視圖看起來不錯。

任何建議如何防止我的父視圖卸載內存警告?


EDIT1

我想通了,發生了什麼事,卸載和復出的觀點和viewDidLoad中內進入最後一個視圖(生命週期)後,使用TabBar沒有插入導航視圖。我檢查的TabBar的子視圖:

UIView *tabBarControllerWrapperView = [[[self.tabBarController.view.subviews objectAtIndex:0] subviews] objectAtIndex:0]; 

    // tabBar UIViewControllerWrapperView has not views 
    if([tabBarControllerWrapperView.subviews count] == 0) 
    { 
     // add navigationbar view 
     [tabBarControllerWrapperView addSubview:self.navigationController.view]; 
    } 

有沒有更好的辦法來解決它,任何想法:

UITransitionView 
    ==><UIViewControllerWrapperView> 
     ==> empty 
<UITabBar> 

我在viewDidLoad中添加作爲子視圖重新整合的導航欄的看法?

回答

0

在不可見控制器上存在內存警告後,該警告稱爲viewDidUnload(iOS < = 5)。在您的情況下,顯示模態郵件合併器的控制器的視圖可能已卸載。

viewDidUnload背後的想法是,一旦再次調用viewDidLoad,您就可以保存恢復視圖所需的數據。你必須記住的是你的viewDidLoad可以被多次調用。

在iOS6的viewDidUnload不再被調用,所以這個邏輯必須移動到didReceiveMemoryWarning

+0

感謝@ elio.d,但我們回顧了生命週期和工作正常,也是在其他模態像廣告條幅,但電子郵件作曲家是意想不到的,因爲進入viewdidload並重建所有他們的視圖對象,但沒有插入視圖。我們發現tabbar並沒有插入導航欄視圖,但是很奇怪。 –