使用 SceneDelegate 设置 CoreData - 未知标识符“窗口"错误 - iOS 13 以上 [英] Setting Up CoreData with SceneDelegate - unknown identifier 'window' error - iOS 13 onwards

查看:21
本文介绍了使用 SceneDelegate 设置 CoreData - 未知标识符“窗口"错误 - iOS 13 以上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用 Core Data 的官方苹果文档.在此处找到.我还遇到了一个与我的问题有关的问题,就在 堆栈.

I was trying to use the official apple documentation for Core Data. Found here. I also ran into a question which was related to my issue, right here on stack.

我遇到了一个问题,它一直说窗口"在 AppDelegate 的上下文中不可用.根据官方文档,这是非常基本的步骤.

I ran into an issue where, it kept saying that 'window' is not available in the context of AppDelegate. This is the very basic step as per the official documentation.

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {        
    if let rootVC = window?.rootViewController as? ViewController {
        rootVC.container = persistentContainer
    }        
    return true
}

我该如何解决这个问题?

How do I get past this?

推荐答案

问题归结为变化,主要是在 iOS 13 及更高版本中支持多场景.查看此reddit 链接以进行讨论.

The issue boils down to the changes, primarily, support for multiple scenes in iOS 13 and above. check this reddit link for the discussion.

解决方案是将一些东西从 AppDelegate 移到 SceneDelegate.

The solution is to move some of things from AppDelegate to SceneDelegate.

这是上述两个类的基本部分的最终形式.

Here is the final form of the essential parts of the above two classes.

----场景委托

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    self.window = UIWindow(windowScene: windowScene)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let rootVC = storyboard.instantiateViewController(identifier: "ViewController") as? ViewController else {
        print("ViewController not found")
        return
    }
    //set the storage here
    rootVC.container = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer
    //I dont want a  UI navigation controller.
    //let rootNC = UINavigationController(rootViewController: rootVC)
    //self.window?.rootViewController = rootNC
    //I want to use my basic view controller here. use rootNC to get a UI navigation controller
    self.window?.rootViewController = rootVC
    self.window?.makeKeyAndVisible()

}

--AppDelegate(保持不变)

--AppDelegate (remains unchanged )

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    //before iOS 13 you would be putting stuff here but not anymore.
    return true
}

最后,您将在 AppDelegate 本身中保留与存储相关的代码.

Finally, you will leave the storage related code, where it was, in AppDelegate itself.

这篇关于使用 SceneDelegate 设置 CoreData - 未知标识符“窗口"错误 - iOS 13 以上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆