即使网点看起来正确,如何解决错误 SIGABRT?

How to solve the error SIGABRT even if the outlets look correct?

我正在使用 XcodeSwift 开发我的第一个 iOS 应用程序。我的应用有多个 UIViewController (=VC)。一切正常,但有一个错误,我无法在 Google 或 Whosebug 的帮助下自行解决。

我的问题是:

我在 VC 'CompleteTest' 中有一个名为 'Quit' 的 UIButton,我控制它在 Main 情节提要中拖到 VC 'Main Menu' 以便在按下时将用户带回 'Main Menu'。 但是当我在模拟器中单击此 UIButton 时出现错误:

Thread 1 signal SIGABRT comes up.

这不是我第一次遇到这个错误,我看到堆栈溢出中的多个线程给出了解决这个问题的方法。过去通过检查网点我可以很容易地解决这个错误。 但在这种情况下,这个解决方案不起作用,因为插座看起来很好(没有显示感叹号)。

更奇怪的是错误显示在哪里。 通常 SIGABRT 错误显示在 AppDelegate 中,如果我没记错的话。 但就我而言,它显示在 VC 'CompleteTest' 文件的第 54 行。在这一行,我使用覆盖函数 'prerpare'.

将数据传输到下一个 VC 'Final Complete test'

不幸的是,我不能在这个问题中放图片,即使很难 我准备好了。无论如何,我希望我的问题仍然清楚。

此外,请原谅我的英语不好,因为它是我的第二语言。

我该如何进行?预先感谢您的帮助!

import UIKit

class CompleteTest: UIViewController {

    // Components of Visualisation VC
    @IBOutlet weak var ShotNumber: UILabel!

    @IBOutlet weak var ProjectedScore: UILabel!

    @IBOutlet weak var Distance: UILabel!

    var sum: Double = 100.0     //sum represents overall Score of Test

    @IBOutlet weak var Report: UIButton!

    var help: Int = 0           // var 'help' is helping to change the number showed on the Scoring Buttons in VC

    @IBOutlet weak var Left1: UIButton!

    @IBOutlet weak var Right1: UIButton!

    @IBOutlet weak var Center1: UIButton!

    @IBOutlet weak var BadContact1: UIButton!



    //Percentage components
    var leftpct: Int = 0

    var rightpct: Int = 0

    var centerpct: Int = 0

    var totalpct: Int = 0

    var badcontactpct: Int = 0




    // Transfer of data from ViewController 'CompleteTest' to ViewController 'FinalCompleteTest'
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let finalCompleteTest = segue.destination as! FinalCompleteTest
        finalCompleteTest.score = String(sum)
        finalCompleteTest.Leftpct = Int(leftpct)
        finalCompleteTest.Rightpct = Int(rightpct)
        finalCompleteTest.Centerpct = Int(centerpct)
        finalCompleteTest.Totalpct = Int(totalpct)
        finalCompleteTest.BadContactpct = Int(badcontactpct)

}

    override func viewDidLoad() {
        super.viewDidLoad()
        Report.isHidden = true
    }


    //Scoring Buttons

    @IBAction func BadContact(_ sender: Any) {
        sum -= 1
        BadContact1.setTitle("OK", for: .normal)
        badcontactpct += 1

    }

    @IBAction func Left(_ sender: Any) {
        sum -= 0.5
        help += 1
        Left1.setTitle(String(help), for: .normal)
        if help == 1 {
        leftpct += 1
            totalpct += 1}
    }

    @IBAction func Right(_ sender: Any) {
        sum -= 0.5
        help += 1
        Right1.setTitle(String(help), for: .normal)
        if help == 1 {
        rightpct += 1
            totalpct += 1}
    }

    @IBAction func Center(_ sender: Any) {
        Center1.setTitle("0", for: .normal)
        centerpct += 1
            totalpct += 1

    }

感谢您花时间写出如此详尽的问题。如果需要,您可以将图片上传到其他网站(例如 imgur),然后使用此处的直接链接。

作为 as! 可能是您遇到此崩溃的原因。如果将代码替换为如下内容,则可以轻松证明这一点:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let finalCompleteTest = segue.destination as? FinalCompleteTest {
            finalCompleteTest.score = String(sum)
            finalCompleteTest.Leftpct = Int(leftpct)
            finalCompleteTest.Rightpct = Int(rightpct)
            finalCompleteTest.Centerpct = Int(centerpct)
            finalCompleteTest.Totalpct = Int(totalpct)
            finalCompleteTest.BadContactpct = Int(badcontactpct)
        } else {
            print("oh no, segue.destination is not a FinalCompleteTest")
        }
    }

如果您可以在控制台中看到该消息,则可能是您没有在故事板上正确连接某些内容。

如果没有,请尝试向我们提供更多信息。

如果您不理解 "dangers" 在您的代码中使用 !,请先尝试理解 Optionals,如果您需要更多帮助,请随时询问.

祝你好运!