web-dev-qa-db-ja.com

Xcode 11ベータ:AppDelegateファイルにウィンドウグローバル変数がありません

Xcode 11ベータの問題に直面しています。

問題は、デフォルトのwindow変数がAppDelegateファイルで宣言されていないことです。

誰かがこれと同じ問題に直面していますか?

6

デフォルトの変数ウィンドウ:UIWindow?これで、SceneDelegate.Swiftで移動されます。 Xcode 11でrootViewControllerを設定するには、SceneDelegate.Swiftファイル内で作業できます。シーンデリゲートで、ウィンドウインスタンスとルートビューコントローラを次のように作成する必要があります。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        // set or create your viewController here
        let yourViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(identifier: "yourViewController") as! YourViewController
        // set the rootViewController here using window instance
        self.window?.rootViewController = yourViewController
    }

また、この回答は役に立ちます: ルートビューコントローラーを手動でセットアップすると黒い画面が表示されるのはなぜですか?

それがあなたを助けることを願っています!

2
Emdad

私の場合、それで十分です。

    var window: UIWindow? // add this by yourself
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        window = UIWindow(frame: Device.bounds)
        let root = DDTabBarController()
        window?.rootViewController = root
        window?.makeKeyAndVisible()
        return true
    }
0
AllenPong

私のアプローチ:

最初に、AppDelegateで、次のように、アクセスするView Controllerのクラスを使用して静的プロパティを作成します

class AppDelegate: UIResponder, UIApplicationDelegate {

    // MARK: Home
    static var homeViewController: HomeViewController?

    ...
}

次に、ビューコントローラで

// MARK: - Managing the view
override func viewDidLoad() {
    super.viewDidLoad()

    // Singleton
    AppDelegate.homeViewController = self

    ...
}

使い方:

extension UIViewController {
    var homeViewController: HomeViewController? {
        if let controller = self as? HomeViewController {
            return controller
        }

        return AppDelegate.homeViewController
    }
}
0
Miniapps