Настройка CoreData с SceneDelegate - ошибка неизвестного идентификатора «окна» - iOS 13 года - PullRequest
2 голосов
/ 26 февраля 2020

Я пытался использовать официальную документацию Apple для Core Data. Найдено здесь . Я также столкнулся с вопросом, который был связан с моей проблемой, прямо здесь, в stack .

. Я столкнулся с проблемой, в которой постоянно говорилось, что «окно» недоступно в контексте. AppDelegate. Это самый базовый c шаг согласно официальной документации.

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

Как мне пройти через это?

1 Ответ

2 голосов
/ 26 февраля 2020

Проблема сводится к изменениям, в первую очередь, поддержки нескольких сцен в iOS 13 и выше. проверьте эту ссылку Reddit для обсуждения .

Решение состоит в том, чтобы переместить некоторые вещи из AppDelegate в SceneDelegate.

Вот окончательная форма основных частей выше двух классов.

---- SceneDelegate

    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 (остается без изменений)

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...