转换到另一个视图控制器时,应用程序崩溃而没有有关崩溃的信息

Application crashing without information about crash when transitioning to another view controller

我有两个视图控制器,LoginViewControllerTermsAndPrivacyViewController

在第一个视图控制器上,有一个带有 IBAction 的按钮,可以打开 TermsAndPrivacyViewController。在 TermsAndPrivacyViewController 我有网络视图,加载 url 我从 LoginViewController 路过。所以,这是代码(登录视图控制器):

 @IBAction func tosAction(_ sender: Any) {

        if let vc = UIStoryboard(name: "Login", bundle: nil).instantiateViewController(withIdentifier: kTOSViewControllerIdentifier) as? TermsAndPrivacyViewController{

            vc.url =  URL(string: kTOSUrl)
            self.navigationController?.pushViewController(vc, animated: true)

        }
    }

关于 TermsAndPrivacyViewController,我有这个:

override func viewDidLoad() {
        super.viewDidLoad()

        webView.navigationDelegate = self
        if let `url` = url {
            webView.load(URLRequest(url: url))
            webView.allowsBackForwardNavigationGestures = true
        }
    }

所以,当我点击一个按钮时,应用程序崩溃 SIGABRT 消息,没有别的。此外,我没有收到有关 Firebase Crashlytics 的任何崩溃报告(我首先从调试器中分离了一个应用程序,并产生了崩溃)。

现在,奇怪的部分:/ ... 如果我在 tosAction() 方法的第一行放置一个断点,然后一步一步(或让它继续),一切正常。没有崩溃???

我是不是遗漏了什么明显的东西?崩溃的原因是什么?另外,我尝试输入 Exception Breakpoint 但没有任何变化。我只得到这个:

和控制台:

所以,根本没有关于崩溃的信息。

编辑

好吧,现在更奇怪的是:)我刚刚在不同的手机上试过应用程序。

应用程序在 iPhone 6s+、iOS 12.1(16B5059d) 上崩溃,但它在 iPhone 6、iOS 12.0 (16A366)[=24= 上正常运行]

可能您使用了那些设备不支持的库或框架。 你必须看到错误

你试过了吗?

当应用程序崩溃时,在控制台中按 cmd+F 并搜索异常。 现在你可以看到你的错误

希望对您有所帮助。

或许您可以在 LoginViewController 中使用 segue 方法。

 @IBAction func tosAction(_ sender: Any) {
        performSegue(withIdentifier: "GoToWeb", sender: nil)
    }
}

并调用 prepareForSegue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if (segue.identifier == "GoToWeb") {
            let vc = segue.destination as! TermsAndPrivacyViewController
            vc.url = "YOUR_URL"
        }

并且 TermsAndPrivacyViewController 中的代码没有改变

编辑:

也许你的 UIButton 绑定不好,你可以在右侧面板的 "Show the connection inspector" 部分验证你的按钮是否只调用一次。

要获取有关此类崩溃的更多信息,请打开断点菜单(或按 CMD+8),单击左下角的加号图标并按 异常断点...。右键单击,然后编辑。添加类型为 Debugger Command 的操作并输入以下内容:

再次重现崩溃,这次控制台会输出更有用的错误信息。