Как решить ошибку SIGABRT, даже если розетки выглядят правильно? - PullRequest
1 голос
/ 09 мая 2019

Я работаю над своим первым приложением для iOS с Xcode и Swift. Мое приложение имеет несколько UIViewController с (= VC). Все работает довольно хорошо, но есть ошибка, которую я не смог решить самостоятельно с помощью Google или StackOverflow.

Моя проблема:

У меня есть UIButton под названием «Выход» в ВК «CompleteTest», который я контролирую, перетаскивая в раскадровке Main в «Главное меню» ВК, чтобы он возвращал пользователя в «Главное меню». когда она нажата. Но когда я нажимаю эту UIButton в симуляторе, появляется ошибка:

Появляется сигнал SIGABRT нити 1.

Это не первый раз, когда я сталкиваюсь с этой ошибкой и вижу, что несколько потоков в переполнении стека дают решение этой проблемы. Раньше, проверяя торговые точки, я мог довольно легко решить эту ошибку. Но в этом случае это решение не работает, потому что выходы выглядят нормально (восклицательные знаки не показаны).

Что еще более странно, это место, где отображается ошибка. Обычно ошибка SIGABRT отображается в AppDelegate, если я не ошибаюсь. Но в моем случае это показано в строке 54 файла 'CompleteTest' VC. В этой строке я передаю данные в следующий VC 'Final Complete test' с помощью функции переопределения 'prerpare'.

К сожалению, я не мог поставить изображения в этом вопросе, даже жесткие Я подготовил их. В любом случае, я надеюсь, что моя проблема все еще ясна.

Кроме того, извините за мой плохой английский, так как это мой второй язык.

Как мне поступить? Заранее благодарю за помощь!

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 голосов
/ 09 мая 2019

Спасибо, что нашли время написать такой подробный вопрос. Если вы хотите, вы можете загрузить свои изображения на другой сайт (например, 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")
        }
    }

Если вы видите это сообщение в консоли, возможно, вы неправильно подключили что-либо на раскадровке.

Если нет, попробуйте дать нам больше информации.

Если вы не понимаете «опасности» использования ! в своем коде, пожалуйста, сначала попытайтесь понять Необязательные и не стесняйтесь спрашивать, нужна ли вам дополнительная помощь.

Удачи!

...