【问题标题】:App running on simulator + physical device suddenly have black screen在模拟器+物理设备上运行的应用程序突然黑屏
【发布时间】:2019-01-09 02:54:55
【问题描述】:

使用 Swift 4 运行 Xcode 9.4.1,应用在任何视图控制器上启动时突然卡在黑屏上。没有崩溃(也没有断点),当注册屏幕打开时,视图在后台可见,同时出现推送通知权限窗口。窗口被接受后,屏幕返回黑色。

App Delegate 运行没有问题,日志看起来很正常,就好像视图加载正确一样。

我尝试清理构建文件夹,删除派生数据,重置模拟器,然后重新启动手机和 Xcode,但没有成功。设备是 iPhone 6,模拟器在各种 iPhone 上测试。

编辑:当在 App Delegate 中删除此功能时,应用似乎可以工作。

func applicationDidBecomeActive(_ application: UIApplication) {        
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.window = UIWindow(frame: UIScreen.main.bounds)
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    if application.applicationIconBadgeNumber > 0 {
        let startVC = mainStoryboard.instantiateViewController(withIdentifier: "ViewController")
        appDelegate.window?.rootViewController = startVC
        appDelegate.window?.makeKeyAndVisible()
        application.applicationIconBadgeNumber = 0
    }

}

【问题讨论】:

  • 显示推送代码
  • 刚刚更新问题
  • 在其他设备上是否正常工作?如果'applicationIconBadgeNumber == 0'
  • 不知道为什么,但是当我删除 applicationDidBecomeActive 函数时,应用程序正常工作,有什么想法吗?

标签: ios swift xcode


【解决方案1】:

问题出在以下行:

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

您正在做的是将带有框架的新窗口对象设置为 AppDelegate 的关键窗口。

您应该将代码更新为:

func applicationDidBecomeActive(_ application: UIApplication) {

    if application.applicationIconBadgeNumber > 0 {

        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let startVC = mainStoryboard.instantiateViewController(withIdentifier: "ViewController")
        appDelegate.window?.rootViewController = startVC
        appDelegate.window?.makeKeyAndVisible()
        application.applicationIconBadgeNumber = 0
    }

}

尝试并分享结果。

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 2022-01-12
    • 2017-03-09
    • 1970-01-01
    • 2020-07-15
    • 2021-11-02
    • 2011-06-15
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多