2016-12-25 15 views
3

このようなほとんどの質問の問題は、viewDidAppearより前にpresentが呼び出されていることです。それが理由ではありません。警告:ビューがウィンドウ階層にないUISplitViewControllerにUIAlertControllerを表示しようとしました

このアプリはNIBのストーリーボードを使用せず、すべての操作はプログラム的です。アプリのウィンドウのrootViewControllerUISplitViewControllerです。分割ビューのビューコントローラは、2つのUINavigationControllerの配列に設定されます。子ビューコントローラは、次にモーダルビューコントローラを表示します。問題は、ビューコントローラがモーダルに表示されている間に、アプリケーションデリゲートから提示されたUIAlertControllerが表示されないことです。そうでなければ動作します。私が提示しようとする方法

window?.rootViewController?.present(alert, animated: true, completion: nil) 

私はこのエラーを取得する:

Attempt to present UIAlertController on UISplitViewController whose view is not in the window hierarchy 

答えて

2

これを解決するために、私は私のアプリデリゲートにこの機能を置きます。

// Utility function to avoid: 
// Warning: Attempt to present * on * whose view is not in the window hierarchy! 
func showAlertGlobally(_ alert: UIAlertController) { 
    let alertWindow = UIWindow(frame: UIScreen.main.bounds) 
    alertWindow.windowLevel = UIWindowLevelAlert 
    alertWindow.rootViewController = UIViewController() 
    alertWindow.makeKeyAndVisible() 
    alertWindow.rootViewController?.present(alert, animated: true, completion: nil) 
} 
+1

非常に似溶液がここで提案されました:http://stackoverflow.com/a/34487871/1187415、スウィフト3のためにここに:http://stackoverflow.com/a/40401936/1187415。 –

関連する問題