Сбой приложения из-за SIGABRT - PullRequest
0 голосов
/ 29 августа 2018

Я на 100 процентов уверен, что все подключено правильно, но я получаю ошибку SIGABRT.

Вот код для SelectViewController:

import UIKit

class SelectViewController: UIViewController {

var accounttype = 0

@IBAction func AdminButton(_ sender: Any) {
}

@IBAction func ParentButton(_ sender: Any) {
}

@IBAction func DriverButton(_ sender: Any) {
}

@IBAction func StudentButton(_ sender: Any) {
    accounttype = 1
}



override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    var SubmitController = segue.destination as! SubmitViewController
    SubmitController.john = accounttype;

}


override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

Вот код для SubmitViewController:

import UIKit

class SelectViewController: UIViewController {

var accountType = 0

@IBAction func AdminButton(_ sender: Any) {
}

@IBAction func ParentButton(_ sender: Any) {
}

@IBAction func DriverButton(_ sender: Any) {
}

@IBAction func StudentButton(_ sender: Any) {
    accountType = 1
}



override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let destination = segue.destination as? SubmitViewController {
        destination.john = accountType
        print("Inside if statement")
    }

}


override func viewDidLoad() {
    super.viewDidLoad()

     print("Out of if statement")
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

Вот консоль:

2018-08-28 17:17:56.529276-0700 SchoolDrive[5178:1005170] 5.4.1 - [Firebase/Analytics][I-ACS023007] Firebase Analytics v.50001000 started
2018-08-28 17:17:56.529921-0700 SchoolDrive[5178:1005170] 5.4.1 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see https://help.apple.com/xcode/mac/8.0/#/dev3ec8a1cb4)
2018-08-28 17:17:57.024884-0700 SchoolDrive[5178:1005198] TIC Read Status [1:0x0]: 1:57
2018-08-28 17:17:57.025067-0700 SchoolDrive[5178:1005198] TIC Read Status [1:0x0]: 1:57
2018-08-28 17:18:01.737912-0700 SchoolDrive[5178:1005175] TIC Read Status [2:0x0]: 1:57
2018-08-28 17:18:01.738363-0700 SchoolDrive[5178:1005175] TIC Read Status [2:0x0]: 1:57
2018-08-28 17:18:03.755460-0700 SchoolDrive[5178:1005196] TIC Read Status [3:0x0]: 1:57
2018-08-28 17:18:03.755664-0700 SchoolDrive[5178:1005196] TIC Read Status [3:0x0]: 1:57
Could not cast value of type 'SchoolDrive.SecondRegisterViewController' (0x10d8349d0) to 'SchoolDrive.SubmitViewController' (0x10d834820).
2018-08-28 17:18:04.613651-0700 SchoolDrive[5178:1004484] Could not cast value of type 'SchoolDrive.SecondRegisterViewController' (0x10d8349d0) to 'SchoolDrive.SubmitViewController' (0x10d834820).
(lldb)

Я очень благодарен за любую помощь, и вся помощь приветствуется. Заранее спасибо. Мне нужна вся помощь как можно быстрее. Это облегчит мне. Еще раз большое вам спасибо за всю гепатит, и я очень благодарен.

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Это сбой в вашем случае из-за приведения силы для исправления, который использует if let или guard для предотвращения сбоя. Измените свой код в методе prepare(for:, sender:) ниже.

if let destination = segue.destination as? SubmitViewController {
  destination.john = accountType
}

или

guard let destination = segue.destination as? SubmitViewController else {
  return 
}

destination.john = accountType
0 голосов
/ 29 августа 2018

В соответствии с вашей ошибкой говорится, что вы можете связать целевой переход с неправильным VC (SecondRegisterViewController). И ожидается это SubmitViewController. Для более безопасного способа используйте метод, подобный следующему:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "segueApplicationToSubmitControllerVC"
        {
            if let SubmitControllerVC = segue.destination as? SubmitViewController
            {
                SubmitControllerVC.john = accounttype

            }
        }
    }
0 голосов
/ 29 августа 2018

Вам нужно протестировать segue.destination, чтобы убедиться, что это SubmitViewController, прежде чем просто привести его к как !. Трассировка стека сообщает тип этого экземпляра, если SecondRegisterViewController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...