问题描述
我尝试了几天(但没有成功),只是在将实体(“ 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
并检查那里的所有值。