私の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;
}
一部の UIViewController では、メールを送信するために MFMailComposeViewController を実装しました。
奇妙な問題を実験しました(シミュレーターと実際のデバイスiOS 5.0および5.1で再現)...
iPhone シミュレーター (iOS 5.0 または 5.1 のみ) を使用して、画面上で MFMailComposerViewController モーダルが開いているときにメモリ不足の警告をシミュレートし、[キャンセル] をタップしてから、[削除] をタップし、[下書きを保存] をタップすると、モーダルが親ビューで閉じられます。見えないようです (空白のビュー)。
同じ手順に従うが、メモリ不足の警告をシミュレートした後、MFMailComposeViewController モーダルから電子メールを送信すると、ライフ サイクルは正常に機能しているように見えます。モーダルが閉じられると、親ビューは正常に見えます。
親ビューがメモリ警告でアンロードされないようにする方法はありますか?
編集1
ビューをアンロードしてカムバックし、viewdidload(ライフサイクル)内の最後のビューに入った後、タブバーがナビゲーションビューを挿入していません。tabBar のサブビューを確認します。
UITransitionView
==><UIViewControllerWrapperView>
==> empty
<UITabBar>
viewdidload にサブビューとして追加して、navigationBar のビューを再統合しました。
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];
}
それを修正するより良い方法はありません、何か考えはありますか?