在 Swift 5.0 中从 AppDelegate 实例化窗口失败 [重复]

Posted

技术标签:

【中文标题】在 Swift 5.0 中从 AppDelegate 实例化窗口失败 [重复]【英文标题】:Instantiating Window from AppDelegate Failing in Swift 5.0 [duplicate] 【发布时间】:2019-10-12 00:52:25 【问题描述】:

我正在使用 Xcode 11 和 Swift 5.0。我从另一个使用 Swift 4.2 的应用程序中复制了我的代码。该代码在 AppDelegate 中实例化一个 tabBarViewController,将窗口更改为 tabBarVC,并在满足某些条件时显示它。但它不适用于 Swift 5.0 和 Xcode 11。代码如下:

var window: UIWindow?

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool 
    // Run Firebase
    FirebaseApp.configure()
    // Check Firebase Auth to see if the user is signed in already.
    if Auth.auth().currentUser != nil 
        print ("User is already authenticated and signed in.")
        // Check to make sure the user is stored in local settings.
        if let appUser = LocalStorageService.loadCurrentUser() 
            print ("Local storage has a user: \(appUser)")
            // Create a tab bar controller.
            let tabBarVC = UIStoryboard(name: "Main", bundle: .main).instantiateViewController(withIdentifier: Constants.Storyboard.tabBarController)
            // Show it
            window?.rootViewController = tabBarVC
            window?.makeKeyAndVisible()
        
        return true // If auth has a user and there is local user, window changes.
     else 
        print ("No Authenticated current user, must proceed with Login.")
        return false
    

tabBarVC 已成功填充,但 window 仍为 nil。然后应用程序显示不同的视图控制器。代码与我可以看到的原始应用程序没有什么不同。而那个仍然有效。想法将不胜感激。

【问题讨论】:

【参考方案1】:

我从导航器中删除了SceneDelegate,并从处理场景的info.plist 中删除了以下部分,现在它可以按预期工作(其他应用程序没有SceneDelegateinfo.plist 中的这些部分。我假设它们是在 Xcode 11 中创建项目时添加的):

我在 Apple 文档中了解了 ios 13 的场景。我不打算使用场景,但如果有人确实想使用场景,他们将必须确定如何配置 info.plist 以允许在 AppDelegate 中实例化 VC。

【讨论】:

如果您想使用场景,请查看由 Matt 标记的副本。该答案将窗口置于场景委托中。这个答案完全删除了场景委托。场景不是必需的。

以上是关于在 Swift 5.0 中从 AppDelegate 实例化窗口失败 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中从 AppDelegate 解开 UIWindow 两次

如何在 Swift 中从 Firebase 接收数组

如何在 Swift 中从 NSDictionary 生成 JSON 数据

在 SpriteKit/Swift 中从数组中删除元素

iOS Swift Firebase SDK 导入问题

在 Swift 中从 Firestore 中获取文档列表