セキュリティ上の理由から、フォアグラウンドになる前ではなく、バックグラウンドになる前にアプリの状態を消去する必要があります。applicationWillResignActive のコードは実行されますが、前のビューが表示されたままになり、viewcontroller がスタックから削除されないため、ビューの終了は表示されず、効果もありません。一方、applicationWillEnterForeground のコードが実行され、dismissModalViewControllerAnimated が実際にビューを遷移し、ビュー コントローラーをスタックから削除するときに有効になります。
次の警告が表示されます。
Warning: Attempt to dismiss from view controller <UINavigationController: 0x1e074c90> while a presentation or dismiss is in progress!
強制的にdismissModalViewControllerAnimatedを有効にしてビューのトランジションを表示し、スタックからView Controllerを削除するにはどうすればよいですか?
- (void)applicationWillResignActive:(UIApplication *)application
{
[self initializeState];
}
- (void)initializeState
{
[self.appDelegateDelegate resetApp:self];
}
...
#pragma mark - AppDelegateDelegate
- (void)resetApp:(AppDelegate *)appDelegate
{
[SVProgressHUD dismiss];
[[EmployeeAPIClient sharedInstance] logout];
[self dismissModalViewControllerAnimated:NO];
}
ただし、applicationWillEnterForeground: に含まれている場合は正しく動作します
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[self initializeState];
}