Всем привет! У меня возник вопрос, как передавать данные из разных контроллеров в Entity? В приложении есть несколько контроллеров. По мере перехода от одного контроллера к другому инициализируются свойства Core Data. На данный момент данные, полученные в одном контроллере, пропадают при переходе на следующий. Как их сохранить и передать в другой контроллер? Вариант с массивом мне не подходит, кроме как в ScheduleViewController, где я отображаю список занятий. Мой код:
'''
//Здесь данные сохраняются
private var teacher = Teacher()
private var student = Student()
override func viewDidLoad() {
super.viewDidLoad()
teacher = Teacher(context: context)
student = Student(context: context)
}
private func savePassword () {
if let text = teacherPasswordTextField.text,
text.count > 5 {
do {
teacher.name = teacherNameLabel.text
teacher.password = text
student.teacher = teacher
teacher.customers?.adding(student)
try context.save()
}
catch {
print(error.localizedDescription)
}
}
}
extension TeacherSignInViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
savePassword()
textField.resignFirstResponder()
return teacherPasswordTextField.text!.count > 5
}
}
'''
// А здесь нет
private func setUpTextFields () {
nameTextField.delegate = self
nameTextField.keyboardType = .namePhonePad
passwordTextField.delegate = self
passwordTextField.keyboardType = .namePhonePad
/* MARK: Uncomment this line when publishing */
// passwordTextField.isSecureTextEntry = true
}
private func fetchData () {
guard teacher.name != nil,
teacher.password != nil
else {
return
}
do {
student.name = nameTextField.text
student.password = passwordTextField.text
try context.save()
}
catch {
print(error.localizedDescription)
}
}
}
extension RegistrationViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
guard let text = textField.text else { return false }
if textField == nameTextField && text.count > 3 {
passwordTextField.becomeFirstResponder()
}
if textField == passwordTextField && text.count > 5 {
textField.resignFirstResponder()
}
fetchData()
return nameTextField.text!.count > 3 && passwordTextField.text!.count > 5
}
}
'''
@IBAction private func completionButtonTouchUpInside(_ sender: UIButton) {
delegate?.lessonViewControllerDidSet(self)
dismiss(animated: true, completion: nil)
}
'''
//Сюда переходит учитель после регистрации. Его данные после перехода сбрасываются
extension ScheduleViewController: LessonViewControllerDelegate {
func lessonViewControllerDidSet(_ vc: LessonViewController) {
let lesson = Lesson(context: context)
lesson.date = vc.datePicker.date
lesson.time = vc.timePicker.date
lesson.subject = vc.subjectTextField.text
guard
teacher.name != nil,
teacher.password != nil
else
{
return
}
teacher.addToSchedule(lesson)
lesson.teacherSchedule = teacher
do {
try context.save()
}
catch {
print(error.localizedDescription)
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
'''
[1]: https://isstatic.askoverflow.dev/V2Zb4.png
[2]: https://isstatic.askoverflow.dev/uMHu1.png
试试这样:
但是您仍然需要注册链接老师->课程