在核心数据中的相关实体之间传递数据时,Nill值

问题描述

我尝试了几天(但没有成功),只是在将实体(“ Alumno”)的相关值保存在其“子级” viewController(“ Especialidad”)上之后,将其某些属性保存在Core Data上。

mine是一种音乐教学应用程序,就像一个联系人应用程序一样。在将所选的“特殊”(在这种情况下为乐器)保存到核心数据中之后,我从其表格视图中传递相应的“ segue”

override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
    especialidadSeleccionada = especialidades[indexPath.row]
    performSegue(withIdentifier: "GuardarEspecialidad",sender: self)
    }

与其相关的“父母”,即包括该“特殊”在内的完整学生数据,以及其他属性

接下来,我尝试将每个学生的数据保存在核心数据中:

if nombreField.text != "" && especialidadField.text != "" {
    let context = (UIApplication.shared.delegate as!
    AppDelegate).persistentContainer.viewContext            
    let nuevoAlumno = Alumno(context: context)
    nuevoAlumno.nombre = nombreField.text!
            
    print("Data before: \(especialidadSeleccionada)")
    nuevoAlumno.especialidadRelacionada?.nombre =    especialidadSeleccionada?.nombre
    print("Data after: \(nuevoAlumno.especialidadRelacionada?.nombre)")
            
    //... and so on with the rest of properties
    
    do {
        try context.save()
    } catch {
        print("error")
    }

但是它会保存除标记为nill的“ nuevoAlumno.especialidadRelacionada?.nombre”以外的所有属性。如您所见,出于调试目的,我在相等之前打印其值,获取一个非可选值,然后在其后打印,获取...一个可选值!

我几乎可以肯定,这与他们的关系有关。我已经仔细检查过“ Especialidades”的确切数据是正确的,但是我真的找不到在“ Alumno”实体中保存“ especialidad.nombre”的方法...

一个主意:也许对“ Alumnos”的属性使用“ didSet”可能会有帮助?我已经尝试过,但是不知道如何。

有帮助吗?预先感谢!

解决方法

我已经找到解决方案。我只是使用了不正确的属性语法:

nuevoAlumno.especialidadRelacionada = especialidadSeleccionada

现在可以了。

,

在我看来,像nuevoAlumno.especialidadRelacionada可能是nil。请注意,您在打印之前/之后要打印两种不同的东西。我会说在这行上设置一个断点:

nuevoAlumno.especialidadRelacionada?.nombre = especialidadSeleccionada?.nombre

并检查那里的所有值。