在 Xcode 11.2 中使用 Storyboards 以编程方式设置初始视图控制器

M B*_*M B 3 xcode ios swift

我正在尝试以编程方式设置初始视图控制器,但我不断收到此错误。任何解决方案?

2019-11-07 11:47:43.975990+0000 RestaurantApp[16319:147412] [WindowScene] Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
Run Code Online (Sandbox Code Playgroud)

这是我写的代码。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {


    let window = UIWindow()
    let locationService = LocationService()
    let storyboard = UIStoryboard(name: "Main", bundle: nil) //refernce to our storyboard





    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        //setiing the root view control on our window
        switch locationService.status  {
        case .notDetermined, .denied, .restricted:
            let LocationViewController =
                storyboard.instantiateViewController (withIdentifier: "LocationViewController") as? LocationViewController
            LocationViewController?.locationService = locationService
                window.rootViewController = LocationViewController
        default:
            assertionFailure()
        }

        window.makeKeyAndVisible()

        return true
    }
}

Run Code Online (Sandbox Code Playgroud)

这是我的故事板的图像

在此处输入图片说明

fla*_*ker 14

iOS 13 将窗口设置从AppDelegate移到SceneDelegate以支持使用(可能是多个)场景而不是单个窗口。您现在必须像这样进行设置:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

   var window: UIWindow?
   let storyboard = UIStoryboard(name: "Main", bundle: nil)

   func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
      guard let windowScene = scene as? UIWindowScene else { return }
      let vc = storyboard.instantiateViewController (withIdentifier: "Primary") as! ViewController
      window = UIWindow(windowScene: windowScene)
      window?.rootViewController = vc
      window?.makeKeyAndVisible()
   }
Run Code Online (Sandbox Code Playgroud)