Xcode и Swift — невозможно создать экземпляр другого контроллера представления из AppDelegate

в этом приложении при первом использовании вы получаете 3 страницы приветствия. После последнего я сохраняю bool в true в UserDefaults, чтобы пропустить эти приветственные страницы в следующий раз, когда пользователь запустит приложение.

Для этого в AppDelegate.swift я делаю следующее:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        if UserDefaultsVault.shared.getDidFinishIntro() == true {

            self.window = UIWindow(frame: UIScreen.main.bounds)
            let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

            let mainVC = storyboard.instantiateViewController(withIdentifier: "mainPage") as UIViewController

            self.window?.rootViewController = mainVC
            self.window?.makeKeyAndVisible()

        } 

        return true
    }

Я, конечно, добавил идентификатор раскадровки к моему контроллеру представления в раскадровке, и я также проверил с помощью точки останова, выполняется ли условие (и это правда).

Несмотря на это, главный контроллер не будет создавать экземпляр.

Я сделал другое приложение с этим кодом, и оно всегда работало!

Я что-то ошибся?

В вашем проекте есть SceneDelegate.swift файл?   —  person Lifetronic    schedule 17.06.2020

Здравствуйте, спасибо за ответ. да.   —  person Lifetronic    schedule 17.06.2020

stackoverflow.com/a/58208876   —  person Lifetronic    schedule 17.06.2020

См. также:  Изменить цвет изображения (значка) в tabItems в SwiftUI
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Lifetronic

    Для iOS 13+ вам нужно указать instantiateViewController(withIdentifier:) в SceneDelegate, например:

    class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
        var window: UIWindow?
    
        func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            guard let windowScene = scene as? UIWindowScene else { return }
            window = UIWindow(windowScene: windowScene)
            window?.makeKeyAndVisible()
    
            if UserDefaultsVault.shared.getDidFinishIntro() {
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "mainPage")
            }
        }
    }
    

    Примечание. Ваш код будет работать для устройств с iOS 13 ниже.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: