Warning: Attempt to present xxx on xxx whose view is not in the window hierarchy!

1457 ワード

プロジェクトの中で1つの情況に出会ってVC 1の中で1つがネット接続が切れた後に弾きます枠(UIAlertView)はユーザーにネットが切れたことを注意して、iOS 8以上で使う時UIAlertController、もし現在のスクリーンウィンドウの表示するコントローラがVC 1がpresentを通じて出てくるVC 2ならばWarning:Attempt to present xxx on xxx whose view is not in the window hierarchyが現れます!UIAlertControllerを使用するのもpresentのためで、VC 1が同時にpresentの2つのコントローラがコンソールでこのようなエラーを印刷し、アラートボックスが飛び出しません.解決方法:1、ネットワークで実行する方法を切断して現在のpresentのコントローラを乾かして、警告の枠はやっと弾き出すことができます
        UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
        while (topController.presentedViewController) {
            topController = topController.presentedViewController;
                [topController dismissViewControllerAnimated:NO           completion:nil];
            }
        }

2、現在のpresentのコントローラを取得して弾枠を行う
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"..." message:@"+++" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"ssss" style:UIAlertActionStyleDefault handler:nil];
    [alertController addAction:action];
    
    UIViewController *topVC = [UIApplication sharedApplication].keyWindow.rootViewController;
    while (topVC.presentedViewController) {
        topVC = topVC.presentedViewController;
    }
    [topVC presentViewController:alertController animated:YES completion:nil];

詳しくはこちらを参照