Данные Swift5 равны нулю при передаче, даже если это не так

У меня странная проблема в Swift.

Это связано с другими вопросами о передаче данных между контроллерами представления, однако разница здесь в том, что это предназначено для передачи простого объекта, загруженного из метода 'didSelectRowAt'.

Я передаю данные из контроллера табличного представления, когда выбрана строка. Данные передаются как объект, и я могу распечатать данные и увидеть их в совете, НО когда я пытаюсь присвоить из них значения, я получаю ужасную ошибку: «Неожиданно найдено nil при неявном развертывании необязательного значения». ошибка. Не уверен, что мне здесь не хватает!

Из табличного контроллера A:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "existingStudentSegue", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destinationVC = segue.destination as! StudentDetailTableViewController

        if let indexPath = tableView.indexPathForSelectedRow {
            destinationVC.selectedStudent = studentsArray?[indexPath.row]
        }
    }

Получено контроллером табличного представления B:

    var selectedStudent: Students? {
        didSet {

            print("DATA RECEIVED: \(String(describing: selectedStudent))")
            print("DATA TYPE: \ (type(of: selectedStudent))")
            firstNameText.text = selectedStudent?.firstName

            }
        }

Оператор «print» показывает введенные мной тестовые данные, а «type of» отображает настройку класса «Студенты I» следующим образом.

DATA RECEIVED: Optional(Students {created = 2019-09-24 12:07:23 +0000; name = Anna Altitude; ...(it's all here)
DATA TYPE: Optional<Students>

Код дает сбой, когда я пытаюсь отобразить текст в текстовом поле в Table View Controller B. Я вижу в стеке вызовов данные для selectedStudent пустые. но как это может быть? Объект заполнен и доступен.


person RandallShanePhD    schedule 24.09.2019    source источник


Ответы (1)


Добавьте это внутрь viewDidLoad

firstNameText.text = selectedStudent?.firstName

Проблема в том, что когда didSet запускает firstNameText, он равен нулю, так как vc еще не загружен.

person Sh_Khan    schedule 24.09.2019
comment
удалить его из didSet - person Sh_Khan; 24.09.2019