4

大家好,

我正在使用 Storyboards 构建一个 Swift 应用程序。几个月来我一直在正常工作,但突然间我的应用程序无法正常加载。每当我在模拟器或物理 iPhone 上打开它时,会在出现黑屏之前显示启动屏幕。

我的 Mac 在 macOS Big Sur Developer Beta 5 和 Xcode 12 Beta 6 上,我的 iPhone 在 iOS 14 Developer Beta 5 上。

这是突然发生的,我不记得做过什么导致它发生的事情。

这是我到目前为止尝试过的...

  • 重命名故事板并将目标的常规选项卡更新为新名称,以及执行相同但手动编辑Info.plist
  • 将情节提要移入和移出“复制捆绑资源”
  • 更新到最新的 Xcode 12 测试版(我在 macOS Big Sur 上)
  • 使用DevCleaner清除派生数据
  • 开始一个全新的项目并通过拖放移动我所有的代码和资源(有趣的观察:当我开始一个新项目时,我在默认的 Main.storyboard 中添加了一个简单的标签并在我的 iPhone 上运行它。标签未显示。
  • 向我的 AppDelegate 添加一个函数以在启动时手动加载情节提要
  • 在 AppDelegate 和我的主视图控制器中添加各种打印语句

应用委托

我已经添加

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewController(withIdentifier: "Home")
self.window.rootViewController = initialViewController
self.window.makeKeyAndVisible()
print("App launched")

到我的 AppDelegate。现在,当我运行我的应用程序时,我会被打印出来。我还添加了

override func viewDidLoad() {
    super.viewDidLoad()
    print("Home view loaded")

到我的主视图控制器。现在,当我运行我的应用程序时,我会在 Xcode 中打印出来:

2020-08-28 13:11:20.140963+0100 MY-APP[11077:1951343] libMobileGestalt MobileGestaltCache.c:166: Cache loaded with 4536 pre-cached in CacheData and 53 items in CacheExtra.

2020-08-28 13:11:20.759943+0100 MY-APP[11077:1951162] Metal API Validation Enabled

Home view loaded

App launched

不过,我的 iPhone 上什么也没有。启动屏幕出现,变黑,就是这样。我很混乱。

如果有人知道如何解决这个问题,或者我可以尝试什么,请告诉我。先感谢您!
4

3 回答 3

2

如果您还不想切换到 Scene API,您也可以在最近可能出现在 Info.plist中的部分中设置UIApplicationSupportsMultipleScenes为。这就是我刚刚所做的,它为我解决了这个问题。NOUIApplicationSceneManifest

于 2020-11-08T20:09:28.570 回答
2

确保在你的 sceneDelegate 和 AppDelegate 中都有这样的窗口。

class AppDelegate: UIResponder, UIApplicationDelegate {
    
// check for this

    var window: UIWindow?

// check for this

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

    }

}
于 2020-09-19T15:02:15.240 回答
1

在最新版本中,AppDelegate 中不再提供window属性。现在,它被移动到 SceneDelegate.swift 。您可以尝试在 func 场景 willConnectTo 中执行以下操作:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let _ = (scene as? UIWindowScene) else { return }
    if let windowScene = scene as? UIWindowScene {
        self.window = UIWindow(windowScene: windowScene)
        let storyBoard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = storyBoard.instantiateViewController(withIdentifier: "Home")
        self.window?.rootViewController = initialViewController
        self.window!.makeKeyAndVisible()
    }
}

更新:还要使您的“常规”菜单下的主界面为空

在此处输入图像描述

您还必须从您的项目中删除<key>UIMainStoryboardFile</key><string>Main</string>and 。<key>UISceneStoryboardFile</key> <string>Main</string>Info.plist

于 2020-08-28T15:03:28.657 回答