在 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 中的相关实体之间传递数据时的空值的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI Core Data 删除实体的相关数据

根据 Swift Core Data 中的关系获取与特定实体相关的所有条目

iPhone iOS在呈现图表时如何处理Core Data中的时间间隔?

无法更改 Core Data Xcode 8.2 中的关系属性

如何使用 Core Data 从不相关的实体中获取数据?

IOS/objective-c/core-data:如何从相关实体获取属性