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

时间:2019-05-09 12:32:47

标签: swift xcode sigabrt

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

我的问题是:

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

  

线程1信号SIGABRT出现。

这不是我第一次偶然发现此错误,而且我看到堆栈中有多个线程溢出为该问题提供了解决方案。过去,通过检查出口,我可以很轻松地解决此错误。 但是在这种情况下,此解决方案不起作用,因为出口看起来不错(没有显示感叹号)。

更奇怪的是显示错误的位置。 如果我没记错的话,通常SIGABRT中会显示AppDelegate错误。 但就我而言,它显示在VC'CompleteTest'文件的第54行。在这一行中,我正在使用覆盖函数“ prerpare”将数据传输到下一个VC“最终完成测试”。

不幸的是,我无法在这个问题中添加图片,甚至很难 我准备好了无论如何,我希望我的问题仍然清楚。

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

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

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

    }

1 个答案:

答案 0 :(得分:-1)

感谢您抽出宝贵的时间来写这样一个彻底的问题。如果需要,可以将图像上传到其他站点(例如imgur),然后在此处使用直接链接。

matt mentions in the comments一样,该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")
        }
    }

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

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

如果您不了解在代码中使用!的“危险”,请先尝试了解Optionals,不要犹豫,询问是否需要更多帮助。

祝你好运!