Как исправить окно AppDelegate == nil в проекте со сценами? - PullRequest
2 голосов
/ 08 марта 2020

Есть несколько похожих вопросов, но они все о том, как получить окно, когда проект использует сцены. Но мой немного отличается.

Вы предлагаете получить активное окно другим способом - это нормально. Но что делать со старыми библиотеками (в моем случае это пользовательские представления активности), которые обращаются к необязательному свойству окна с «неявным распаковыванием»: appDelegate.window!

Возможно ли переопределить appDelegate.window свойство getter для вернуть текущее окно?

1 Ответ

1 голос
/ 08 марта 2020

Здесь возможен подход

1) объявить свойство окна в делегате приложения

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    ...

2) назначить его явно в сцене при отображении окна (или создании, какое место предпочтительнее)

  func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        ...
        window.makeKeyAndVisible()
        if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
            appDelegate.window = window
        }
...