【问题标题】:Application crashing without information about crash when transitioning to another view controller转换到另一个视图控制器时应用程序崩溃而没有有关崩溃的信息
【发布时间】:2019-03-27 13:10:03
【问题描述】:

我有两个视图控制器,LoginViewControllerTermsAndPrivacyViewController

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

 @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) 上正常运行

【问题讨论】:

  • 是在 LoginViewController 页面还是在 TermsAndPrivacyViewController 页面崩溃?
  • 我试图弄清楚这一点,但是当它崩溃时,当我点击一个按钮(在 LoginViewController 上)时,它会转到 AppDelegate 的第一行(参见图片)。 @BadrFilali

标签: swift exception crash storyboard swift4


【解决方案1】:

也许您使用了这些设备不支持的库或框架。 你必须看到错误

你试过了吗?

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

希望对您有所帮助。

【讨论】:

  • 控制台中没有任何内容。我的意思是,几乎没有。它说:libc++abi.dylib: terminating with uncaught exception of type NSException
  • 相同的代码适用于其他手机。这是非常简单和标准的代码,总是有效的。我想知道它是否与时间有关......
  • 你确定不删除 IBOutlet 或 Action 而不断开表单 ViewController?在 Main.storyboard 中右键单击您的 ViewController 并查看您没有任何警告?
  • 不。按钮的 IBOutlet,它的 IBAction 就在那里。
  • 所以只剩下一件事了。我认为您使用了这些设备不支持的框架或库。阅读你图书馆的文档。如果它不是真的朗姆酒
【解决方案2】:

也许您可以在 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,如果你的按钮只被调用一次,你可以在右侧面板中的“显示连接检查器”部分中验证。

【讨论】:

  • 哦,我也试过了(只是忘了提)...无论我使用 segue 还是推送视图控制器,它都会以同样的方式崩溃:/
  • 我会说一切看起来都不错。一个按钮有一个 IBAction 和一个 IBOutlet。正如我所说,奇怪的是,这段代码在除 iPhone6s+ 之外的所有其他手机上都运行良好......
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多