【问题标题】:Swift Storyboard app launches to a black screenSwift Storyboard 应用程序启动到黑屏
【发布时间】:2020-12-17 09:41:44
【问题描述】:

大家好,

我正在使用 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 和我的主视图控制器中添加各种打印语句

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 上什么也没有。启动屏幕出现,变黑,就是这样。我很困惑。

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

【问题讨论】:

  • 你解决了这个问题吗?
  • @AshleyMills 你们找到解决方案了吗?
  • 您找到解决方案了吗?我也面临同样的问题。

标签: ios swift xcode storyboard uikit


【解决方案1】:

确保在你的 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 {

    }

}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在最新版本中,window 属性在 AppDelegate 中不再可用。现在,它被移动到 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()
          }
      }
      

      更新:也让你在常规菜单下的主界面是空的

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

      【讨论】:

      • 嗯,这还没有做任何事情......应用程序仍然启动到黑屏。
      • 那么可能还有其他问题。我们看不到您的情节提要的详细信息,它是如何组织的。但是,General下的Main Interface是空的吗?
      • 不,主界面选择了 Main.storyboard。我一直在玩这个,但仍然没有运气......感谢您的帮助。
      • 您还必须从您的信息中删除 UIMainStoryboardFileMainUISceneStoryboardFileMain .plist 您的项目。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多