web-dev-qa-db-fra.com

Xcode 11 beta: le fichier AppDelegate n'a pas de variable globale de fenêtre

Je rencontre un problème dans Xcode 11 beta.

Le problème est que je ne reçois pas la variable window par défaut déclarée dans le fichier AppDelegate.

Quelqu'un est-il confronté à ce même problème?

6
Rashesh Bosamiya

La fenêtre var par défaut: UIWindow? Est maintenant déplacé dans SceneDelegate.Swift. Pour définir un rootViewController dans Xcode 11, vous pouvez travailler dans le fichier SceneDelegate.Swift. Dans le délégué de scène, vous devez créer l'instance de fenêtre et le contrôleur de vue racine comme ci-dessous:

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
    }

Cette réponse est également utile: Pourquoi la configuration manuelle du contrôleur de vue racine affiche-t-elle un écran noir?

J'espère que cela vous aidera!

2
Emdad

Dans mon cas, c'est tout ce qu'il faut.

    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

Mon approche:

tout d'abord, dans AppDelegate, créez une propriété statique avec la classe du contrôleur de vue auquel vous souhaitez accéder, comme ceci

class AppDelegate: UIResponder, UIApplicationDelegate {

    // MARK: Home
    static var homeViewController: HomeViewController?

    ...
}

puis, dans le contrôleur de vue

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

    // Singleton
    AppDelegate.homeViewController = self

    ...
}

comment utiliser:

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

        return AppDelegate.homeViewController
    }
}
0
Miniapps