Проблема сводится к изменениям, в первую очередь, поддержки нескольких сцен в 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.