Сейчас я практикуюсь в создании нескольких разных приложений и пытаюсь выполнить простую задачу передачи данных от одной раскадровки к другой.

  • Я хочу перейти от кнопки «+» на главном контроллере представления к «созданию цели» на контроллере представления «Создать цель». (Это отлично работает)

  • Затем я хочу, чтобы пользователь заполнил три текстовых поля в Create Goal ViewController и отправил данные с помощью кнопки Create Goal.

  • Затем пользователь будет перенаправлен обратно к контроллеру главного представления домашней страницы, и данные из трех текстовых полей будут введены в три метки на контроллере главного представления.

Однако всякий раз, когда я пытаюсь запустить приложение, я получаю следующую ошибку:

Неустранимая ошибка: неожиданно обнаружено значение nil при неявном развертывании необязательного значения: file / Users / jon / Desktop / Practice App Development / PracticePassDataOpna / PracticePassDataOpna / ViewController.swift, строка 28 2020-04-18 16: 15: 05.181014 + 0100 PracticePassDataOpna [8267: 419753] Неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения: file / Users / jon / Desktop / Practice App Development / PracticePassDataOpna / PracticePassDataOpna / ViewController.swift , строка 28

Для справки, вот мои контроллеры представления:

Контроллер основного вида:

Main View Controller

Создать контроллер представления:

Create View Controller

А вот мой код:

Главный ВК:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var goalName: UILabel!

    @IBOutlet weak var targetDate: UILabel!

    @IBOutlet weak var longDescription: UILabel!

    var goalText = ""
    var dateText = ""
    var descriptionText = ""


    override func viewDidLoad() {
        super.viewDidLoad()


        goalName.text = goalText
        targetDate.text = dateText
        longDescription.text = descriptionText
    }

    @IBAction func createButton(_ sender: UIButton) {
        performSegue(withIdentifier: "createSegue", sender: self)
    }


}

Создать ВК:

import UIKit

class CreateGoalViewController: UIViewController {

    @IBOutlet weak var goalInput: UITextField!

    @IBOutlet weak var dateInput: UITextField!

    @IBOutlet weak var descriptionInput: UITextField!

    var goalAdd = ""
    var dateAdd = ""
    var descriptionAdd = ""



    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func createGoalButton(_ sender: UIButton) {

        self.goalAdd = goalInput.text!
        self.dateAdd = dateInput.text!
        self.descriptionAdd = descriptionInput.text!

        performSegue(withIdentifier: "createGoalSegue", sender: self)

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        var vc = segue.destination as! ViewController
        vc.goalText = self.goalAdd
        vc.dateText = self.dateAdd
        vc.descriptionText = self.descriptionAdd
    }

}

И чтобы было понятнее - это строка 28:

goalName.text = goalText

Любая помощь была бы замечательной - я не понимаю, почему он не работает, учитывая, что это пустая строка? Может в этом проблема. Ваше здоровье!

1
Jon Nicholson 18 Апр 2020 в 18:30

1 ответ

Лучший ответ

Проблема в этой функции:

@IBAction func createGoalButton(_ sender: UIButton) {

        self.goalAdd = goalInput.text!
        self.dateAdd = dateInput.text!
        self.descriptionAdd = descriptionInput.text!

        performSegue(withIdentifier: "createGoalSegue", sender: self)

    }

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

@IBAction func createGoalButton(_ sender: UIButton) {

            let x = "You never added a goal"
            let y = "You never added a date"
            let z = "You never added a description"

            self.goalAdd = goalInput.text ?? print(x)
            self.dateAdd = dateInput.text ?? print(y)
            self.descriptionAdd = descriptionInput.text ?? print(z)

            performSegue(withIdentifier: "createGoalSegue", sender: self)

        }
1
Jonah Legg 19 Апр 2020 в 00:48