Данные из двух контроллеров представления добавлены в третий контроллер представления - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу отправить информацию из текстовых полей VC one в подтверждение VC.Точно так же я затем хочу отправить информацию из текстовых полей на VC два в подтверждение VC.ConfirmationVC должен отображать данные, введенные в VC one и VC two, но приложение вылетает.

ПРИМЕЧАНИЕ. VC one и VC two находятся в одном файле VC (RegisterVC).VC три находится в своем собственном файле VC (ConfirmationVC).Вот картинка из трех контроллеров представления.

Я получаю следующую ошибку: Поток 1: сигнал SIGABRT.

Спасибо за любую помощь!

//Source VC
class RegisterVC: UIViewController {


@IBOutlet weak var firstName: UITextField!
var firstNameS = ""

@IBOutlet weak var lastName: UITextField!
var lastNameS = ""

@IBOutlet weak var birthday: UITextField!
var birthdayS = ""

@IBOutlet weak var height: UITextField!
var heightS = ""


override func viewDidLoad() {
    super.viewDidLoad()
}


@IBAction func sendPage1(_ sender: Any) {
    self.firstNameS = firstName.text ?? "empty"
    self.lastNameS = lastName.text ?? "empty"
    self.birthdayS = birthday.text ?? "empty"


    performSegue(withIdentifier: "P1", sender: self)
}



@IBAction func sendPage2(_ sender: UIButton) {
     self.heightS = height.text ?? "empty"

     performSegue(withIdentifier: "P2", sender: self)
}




override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    var vc = segue.destination as! ConfirmationVC // connect both VC's

    vc.confirmFirstNameD = self.firstNameS
    vc.confirmLastNameD = self.lastNameS
    vc.confirmBirthdayD = self.birthdayS
    vc.confirmHeightD = self.heightS

}

}


//Destination VC
class ConfirmationVC: UIViewController {


@IBOutlet weak var confirmFirstName: UILabel!
var confirmFirstNameD = ""

@IBOutlet weak var confirmLastName: UILabel!
var confirmLastNameD = ""

@IBOutlet weak var confirmBirthday: UILabel!
var confirmBirthdayD = ""

@IBOutlet weak var confirmHeight: UILabel!
var confirmHeightD = ""




override func viewDidLoad() {
    super.viewDidLoad()
    confirmFirstName.text = confirmFirstNameD
    confirmLastName.text = confirmLastNameD
    confirmBirthday.text = confirmBirthdayD
    confirmHeight.text = confirmHeightD
}

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Как говорилось в @BCza, лучше всего разбить ваш код на два отдельных контроллера представления, так как они собирают разные данные.Вы можете передать информацию из первого VC во второй, а затем всю информацию из второго в ConfirmationVC.Ваш код будет выглядеть так:

Первый VC

class FirstVC: UIViewController {


@IBOutlet weak var firstName: UITextField!
var firstNameS = ""

@IBOutlet weak var lastName: UITextField!
var lastNameS = ""

@IBOutlet weak var birthday: UITextField!
var birthdayS = ""

override func viewDidLoad() {
    super.viewDidLoad()
}


@IBAction func sendPage1(_ sender: Any) {
    self.firstNameS = firstName.text ?? "empty"
    self.lastNameS = lastName.text ?? "empty"
    self.birthdayS = birthday.text ?? "empty"

    performSegue(withIdentifier: "P1", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    var vc = segue.destination as! SecondVC // cast to SecondVC to set the saved values below

    vc.savedFirstName = self.firstNameS
    vc.savedLastName = self.lastNameS
    vc.savedBirthday = self.birthdayS    
}

}

Второй VC

class SecondVC: UIViewController {

@IBOutlet weak var height: UITextField!
var heightS = ""

//These will be given a value upon segueing from the first view controller to the second
var savedFirstName = ""
var savedLastName = ""
var savedBirthday = ""

override func viewDidLoad() {
    super.viewDidLoad()
}   

@IBAction func sendPage2(_ sender: UIButton) {
     self.heightS = height.text ?? "empty"

     performSegue(withIdentifier: "P2", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    var vc = segue.destination as! ConfirmationVC // pass the data from both VC's to ConfirmationVC

    vc.confirmFirstNameD = self.savedFirstName
    vc.confirmLastNameD = self.savedLastName
    vc.confirmBirthdayD = self.savedBirthday
    vc.confirmHeightD = self.heightS

}

}
0 голосов
/ 27 ноября 2018

Ваш первый VC не подключен к вашему Confirmation VC.The Segue указывает на ваш второй VC, который не относится к этому типу.Поэтому, когда вы говорите,

var vc = segue.destination as! ConfirmationVC

, приложение вылетает.Вам нужно иметь разные сегменты, так как вы делаете хотите использовать разные места назначения для каждого.

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

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