web-dev-qa-db-ja.com

rootViewController iOS 13を設定する

Xcodeをアップグレードした後、アプリケーションの重要な部分が機能しなくなりました。

アプリが起動したら、関数を実行してブールフラグをチェックし、正しいrootViewControllerを設定します。

しかし、これを設定するために使用していたコードは動作しなくなりました

class func setLoginAsInitialViewContoller(window:UIWindow) {
    print("SET LOGIN") 
    let storyboard = UIStoryboard(name: "Login", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "LoginViewController")
    controller.modalPresentationStyle = .overFullScreen
    window.rootViewController = controller
    window.makeKeyAndVisible()
}

具体的には、アプリが2番目の最後の行window.rootViewController = controllerを取得すると、libc++abi.dylib: terminating with uncaught exception of type NSExceptionエラーでクラッシュします。

上記の関数はUtilities.Swiftというクラスにあり、以下のようにAppDelegate.Swift内から関数を呼び出しています。

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var storyboard: UIStoryboard? = nil

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        UIApplication.shared.isIdleTimerDisabled = true
        Utilities.decideInitialViewController(window: self.window!)

        return true
    }

ルートコントローラーの設定方法に関する解決策や修正は大歓迎です。

感謝!

5
Oliver Ferris

viewDidAppearでは、ルートを設定できます:-

  override func viewDidAppear(_ animated: Bool) {
            print(self.view.window)
            let vc = self.storyboard?.instantiateViewController(identifier: "SecondViewController") as? SecondViewController
            self.view.window?.rootViewController = vc
        }
1
dinesh sharma