UIAlertControllerを自動で消す

ボタンを押さずに画面に表示されているAlertを消す方法
例えば何かの処理が終わった後や、強制的に画面遷移するときに使う

やりかた

UIViewController *presentedViewController = [UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController;
if([presentedViewController isKindOfClass:NSClassFromString(@"UIAlertController")]){
 [presentedViewController dismissViewControllerAnimated:NO completion:nil];
}

presentedViewControllerで最前面のUIViewControllerを取得します。
このUIViewControllerがUIAlertControllerの場合は閉じます。

iOS13の場合

Target iOS13の場合はkeyWindowが非推奨のため使えません。
こちらを参考に以下のように取得します。
How to resolve: 'keyWindow' was deprecated in iOS 13.0

+(UIWindow*)keyWindow
{
    UIWindow        *foundWindow = nil;
    NSArray         *windows = [[UIApplication sharedApplication]windows];
    for (UIWindow   *window in windows) {
        if (window.isKeyWindow) {
            foundWindow = window;
            break;
        }
    }
    return foundWindow;
}