Ios 尝试在板上运行时,应用程序代理出错

Ios 尝试在板上运行时,应用程序代理出错,ios,swift,appdelegate,Ios,Swift,Appdelegate,我正在尝试使用纸质onboarding为我的iOS应用程序制作一个onboarding屏幕,效果很好,但是我在应用程序委托和故事板中遇到了一个问题 当我运行我的应用程序时,出现一个错误: 未能实例化UIMainstryBoardFile“Main”的默认视图控制器-可能未设置指定的入口点 模拟器显示一个黑屏。这是否意味着未设置根视图控制器?在故事板中,我没有设置初始视图控制器,但当我尝试将板载屏幕设置为初始视图控制器时,应用程序运行正常,表明板载视图控制器中没有错误 这是申请表。此外,我还确保故

我正在尝试使用纸质onboarding为我的iOS应用程序制作一个onboarding屏幕,效果很好,但是我在
应用程序委托
和故事板中遇到了一个问题

当我运行我的应用程序时,出现一个错误:

未能实例化UIMainstryBoardFile“Main”的默认视图控制器-可能未设置指定的入口点

模拟器显示一个黑屏。这是否意味着未设置根视图控制器?在故事板中,我没有设置初始视图控制器,但当我尝试将板载屏幕设置为初始视图控制器时,应用程序运行正常,表明板载视图控制器中没有错误

这是申请表。此外,我还确保故事板ID是正确的

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

  window = UIWindow(frame: UIScreen.main.bounds)

  let sb = UIStoryboard(name: "Main", bundle: nil)

  var initialVC = UIStoryboard(name: "Main", bundle:nil).instantiateViewController(withIdentifier: "Onboarding") as UIViewController

  let userDefaults = UserDefaults.standard

  if userDefaults.bool(forKey: "onboardingComplete") {
    initialVC = UIStoryboard(name: "Main", bundle:nil).instantiateViewController(withIdentifier: "Mainapp") as UIViewController
  }

  self.window!.rootViewController = initialVC
}

这里有两个问题

首先,您没有将
ui窗口设置为键和可见。因此,在设置
rootViewController
后添加这行代码:

window?.makeKeyAndVisible()
此时,您的代码将正常工作,但您提到的错误可能仍会在运行应用程序时输出到控制台

创建项目时,Xcode将其设置为自动加载
Main
情节提要(显示初始视图控制器)

因此,即使您正在通过编程方式设置
窗口
,您的应用程序仍在尝试启动主故事板文件中的初始视图控制器,正如项目设置所示

要阻止它尝试这样做,请打开应用程序目标的“常规”设置,清除“主界面”文本字段的内容,然后单击“返回”保存更改

这将更新项目的
info.plist
,删除导致在应用程序启动时发生此自动行为的
主情节提要文件基名称
键/值

截图如下:


此代码适用于我:

let onboardingVC = "get your onboarding VC here"

window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = onboardingVC
window.makeKeyAndVisible()
我希望这对你有帮助。如果遇到任何问题,请发表评论。 很乐意帮忙

你似乎错过了最后的“返回真值”

     var window: UIWindow?

       func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

          window = UIWindow(frame: UIScreen.main.bounds)
          let sb = UIStoryboard(name: "Main", bundle: nil)
          var initialVC = sb.instantiateViewController(withIdentifier: "Onboarding") as UIViewController
          let userDefaults = UserDefaults.standard
          if userDefaults.bool(forKey: "onboardingComplete") {
            initialVC = sb.instantiateViewController(withIdentifier: "Mainapp") as UIViewController
          }
          self.window?.rootViewController = initialVC
          return true
        }
更新:

我最近创建了一个新项目,似乎面临您的问题,无法通过AppDelegate以编程方式加载ViewController

这是对我有用的东西。 自从IOS 13和SwiftUI之后,苹果推出了一个名为“SceneDelegate.swift”的新文件来支持SwiftUI功能

因此,您不需要在“AppDelegate.swift”中设置任何内容,而是在“SceneDelegate.swift”中进行设置

已存在Windows的属性

变量窗口:UIWindow


哦,对不起,我忘了张贴
makeKeyAndVisible
。此外,我尝试从主界面删除main,但如果您使用修改后的代码更新问题,包括
makeyeandvisible
调用、设置屏幕截图和
info.plist
的屏幕截图,我仍然会看到黑屏和相同的错误。有人会提供帮助。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
   let yourVCToView = UIStoryboard.storyboardWith....()
   window?.rootViewController = yourVCToView
   guard let _ = (scene as? UIWindowScene) else { return }
}