Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器

Posted

技术标签:

【中文标题】Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器【英文标题】:Xcode & Swift - unable to instantiate another view controller from AppDelegate 【发布时间】:2020-06-17 12:22:11 【问题描述】:

在您第一次使用此应用程序时,您会获得 3 个欢迎页面。在最后一个之后,我在 UserDefaults 中将 bool 保存为 true,以便在用户下次启动应用程序时跳过这些欢迎页面。

为此,我在 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
    

当然,我将情节提要 ID 添加到情节提要中的视图控制器中,并且我还使用断点检查条件是否满足(并且它是真的)。

尽管如此,主控制器不会实例化。

我用这段代码制作了另一个应用程序,它总是有效!

我是不是搞错了什么?

【问题讨论】:

你的项目有SceneDelegate.swift文件吗? 您好,感谢您的回复。是的。 ***.com/a/58208876 【参考方案1】:

对于 ios 13+,您需要在 SceneDelegate 中提供 instantiateViewController(withIdentifier:),如下所示:

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 的设备。

【讨论】:

以上是关于Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用 swift 5 从远程读取 json 内容并在 Xcode 的主界面上打印

iOS - SWift3 & XCode8

Swift xcode 项目错误。无法从表格中检索单元格

解析json xcode swift 4

无法从 swift 控制器代码访问 Objective C 类

Xcode 更新后 Swift Playgrounds 无法正常运行