我的 iPhone 应用程序具有以下结构
AppDelegate / UITabBarController / 5 UINavigationControllers(我的标签) / UIViewController(如每个 UINavigationController 的 rootViewController)
- (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 模态发送电子邮件,当模态被解除时,我的父视图看起来很好。
有什么建议可以防止我的父视图在内存警告中被卸载吗?
编辑1
我弄清楚发生了什么,在卸载并返回视图并进入 viewdidload(生命周期)中的最后一个视图后,tabBar 没有插入导航视图。我检查 tabBar 的子视图:
UITransitionView
==><UIViewControllerWrapperView>
==> empty
<UITabBar>
我通过在 viewdidload 中添加子视图重新集成了导航栏的视图:
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];
}
没有更好的方法来解决它,有什么想法吗?