在 Core Data 中的相关实体之间传递数据时的空值
Posted
技术标签:
【中文标题】在 Core Data 中的相关实体之间传递数据时的空值【英文标题】:Nill value when passing data beetween related entities in Core Data 【发布时间】:2020-08-30 19:41:20 【问题描述】:我现在尝试了几天(没有成功)在核心数据上保存实体(“Alumno”)的一些属性,然后在它的“子”视图控制器(“Especialidad”)上保存其相关值。
Mine 是一款音乐教学应用,就像联系人应用一样。我将选定的“Especialidad”(本例中的演奏乐器)保存到 Core Data 后,从其表格视图中传递相应的“segue”
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
especialidadSeleccionada = especialidades[indexPath.row]
performSegue(withIdentifier: "GuardarEspecialidad", sender: self)
对于其相关的“父级”,完整的学生数据,包含此“Especialidad”以及其他属性。
接下来,我尝试将每个学生的数据保存在 Core Data 上:
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")
但它会保存除“nuevoAlumno.especialidadRelacionada?.nombre”之外的所有属性,标记为 nill。如您所见,出于调试目的,我在相等之前打印它的值,获得一个非可选值,然后在它之后,获得......一个可选值!
我几乎可以肯定这一定与他们的关系有关。我已经仔细检查了“Especialidades”的确切数据是否正确,但我真的找不到在这个“Alumno”实体中保存“especialidad.nombre”的方法......
一个想法:也许对“Alumnos”的该属性使用“didSet”可能会有所帮助?我试过了,不知道怎么弄。
有什么帮助吗?提前致谢!
【问题讨论】:
【参考方案1】:我已经找到了解决方案。我只是使用了不正确的属性语法:
nuevoAlumno.especialidadRelacionada = especialidadSeleccionada
现在可以了。
【讨论】:
【参考方案2】:在我看来 nuevoAlumno.especialidadRelacionada
可能是 nil
。请注意,您在之前/之后打印了两种不同的东西。我会说在这一行设置一个断点:
nuevoAlumno.especialidadRelacionada?.nombre = especialidadSeleccionada?.nombre
并检查那里的所有值。
【讨论】:
以上是关于在 Core Data 中的相关实体之间传递数据时的空值的主要内容,如果未能解决你的问题,请参考以下文章
根据 Swift Core Data 中的关系获取与特定实体相关的所有条目
iPhone iOS在呈现图表时如何处理Core Data中的时间间隔?