Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IOS 13 UIWindow instance is nil during application launching

I am trying to passing my managedObjectContext to the next controller. I innate a UIWindow instance in my appDelegate file, as I need to obtain my stand by controller. However, Xcode said my UIWindow instance is nil.

This id my code:

lazy var managedObjectContext: NSManagedObjectContext = persistentContainer.viewContext

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    let tabController = window!.rootViewController as! UITabBarController
    if let tabViewControllers = tabController.viewControllers {
        let navController = tabViewControllers[0]  as! UINavigationController
        let controller = navController.viewControllers.first as! CurrentLocationViewController
        controller.managedObjectContext = managedObjectContext
    }

    return true
}

Debug

enter image description here enter image description here

It is a bit strange. How to resolve this? Thanks in advance.

like image 583
Nan Avatar asked Dec 08 '22 11:12

Nan


2 Answers

IOS 13 window is inside SceneDelegate while prior to 13 is inside AppDelegate

Move code inside SceneDelegate

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    let tabController = window!.rootViewController as! UITabBarController
    if let tabViewControllers = tabController.viewControllers {
       let navController = tabViewControllers[0]  as! UINavigationController
       let controller = navController.viewControllers.first as! CurrentLocationViewController
       controller.managedObjectContext = managedObjectContext
     }
}
like image 64
Sh_Khan Avatar answered Mar 05 '23 08:03

Sh_Khan


Another Possible Solution

  1. Declare var window: UIWindow? in your AppDelegate.swift.
  2. Remove SceneDelegate.swift from your files.
  3. Remove Application Scene Manifest from Info.plist.
  4. Use window object in your AppDelegate.swift as you want.
like image 38
Essam Fahmi Avatar answered Mar 05 '23 10:03

Essam Fahmi